Go 言語(Golang)のビルド(コンパイル)から実行までの手順です。
次の3パターンにつき、メモとして残しておきます。
1. ファイル1つで実行
2. ファイル2つで実行(同一パッケージ)
3. 複数のパッケージで実行
● 実行した環境
Go version : 1.17
OS : Windows10
1. ファイル1つで実行
まず、単純に一つの main ファイルから実行する場合です。
1-1. フォルダとファイルの作成
まず、「フォルダ」と「Go のファイル」を1つ作ります。
フォルダの場所やファイル名は何でも構いません。
ここでは C:\golang\sample
というディレクトリに、foo.go
というファイルを作ります。
sample
└──foo.go
1-2. ソースコードの記載
foo.go
ファイルに次のソースコードを書きます。
package main
import "fmt"
func main() {
fmt.Println("Hello world!")
}
fmt
というライブラリをインポートして、Plintln
メソッドで、文字列を出力するだけのものです。
なお、package名は main、関数名も main とする必要があります。
Go を実行すると、main パッケージの main 関数から処理が実行されることになります。
1-3. プログラムの実行(Modules を使用しない)
Go はコンパイル言語なので、先にビルド(コンパイル)して実行用のファイルを作成する必要があります。
① go run コマンド
まず、「ビルド」と「実行」を同時に行う方法です。
C:\golang\sample>go run foo.go
Hello world!
作成したフォルダにディレクトリを移動した上で、go run ファイル名
という形でコマンドを打ちます。
処理が実行され「Hello world!」と表示されます。
このコマンドでは、実行ファイルも残らないので、表見上、インタプリタ言語のように実行できます。
② go build コマンド
次の形が、多分、一般的だと思います。
C:\golang\sample>go build foo.go
C:\golang\sample>.\foo
Hello world!
go build ファイル名
というコマンドで、実行ファイルを作成します。
foo.go
というファイルであれば、foo.exe
という実行ファイルができます。
生成された実行ファイルは、.\foo
というコマンドで実行できます(拡張子を除いたファイル名を使用)。
IDE などを使うと、./foo
でも動いたりします。
1-4. プログラムの実行(Modules を使用する)
Go言語の依存モジュール管理ツールである Modules というものを使用すると、より簡易にプログラムの実行ができます。
① go.mod の生成
次のように、go mod init モジュール名
と打てば、Modules を使用するために必要な go.mod
ファイルが生成されます。
指定するモジュール名は何でも構いませんが、ここでは、フォルダ名 sample
を指定しておきます。
C:\golang\sample>go mod init sample
go: creating new go.mod: module sample
go: to add module requirements and sums:
go mod tidy
次のような go.mod
ファイルが生成されます。
module sample
go 1.17
module sample
の sample
は、モジュール名です。この名前で実行ファイルが生成されます。
go 1.17
は Go のバージョンです。
<参考サイト>
・Go言語の依存モジュール管理ツール Modules の使い方
② go run コマンド
C:\golang\sample>go run .
Hello world!
go run .
という形でコマンドを打てば、処理が実行されます。
ファイル名を書かずとも、.
とするだけで、対象となるファイルを全て読み込んでくれます。
③ go build コマンド
C:\golang\sample>go build
C:\golang\sample>.\sample
Hello world!
go build
というコマンドで、実行ファイルを作成します。ファイル名の指定は不要です。
モジュール名に基づき、sample.exe
という実行ファイルができます。
生成された実行ファイルは、.\sample
というコマンドで実行できます。
2. ファイル2つで実行(同一パッケージ)
ファイルを分割してコードを記載する場合です。
ここでは、2つのファイルを同一のパッケージ(main パッケージ)とします。
2-1. ソースコードの記載
次のように2つのファイルを同一フォルダに作成します。
sample
├──foo.go
└──bar.go
main ファイル(foo.go
)には、次のように記載します。
package main
import "fmt"
func main() {
fmt.Println(add(3, 5))
}
もう一つのファイル(bar.go
)には、次のように記載します。
パッケージは同一なので、こちらも package main
としておきます。
package main
func add(a int, b int) int {
return a + b
}
2-2. プログラムの実行(Modules を使用しない)
まず、Modules を使わないで実行する場合です。
① go run コマンド
C:\golang\sample>go run foo.go bar.go
8
作成したフォルダにディレクトリを移動した上で、go run ファイル名 ファイル名
という形でコマンドを打ちます。
3 + 5
の処理が実行され「8」と表示されます。
main ファイル(foo.go
)のみを指定しても動作しないため、使用するファイルを全て指定する必要があります。
② go build コマンド
C:\golang\sample>go build foo.go bar.go
C:\golang\sample>.\foo
8
go build ファイル名 ファイル名
というコマンドで、実行ファイルを作成します。
foo.exe
という実行ファイルができます。
生成された実行ファイルは、.\foo
とコマンドを打てば実行されます。
2-3. プログラムの実行(Modules を使用する)
次に、Modules(go.mod
)を使用する場合です。
① go.mod の生成
go.mod
ファイルを作成していない場合は、次のコマンドでファイルを作成しておきます(前述参考)。
sample
はモジュール名です(何でも構いません)。
C:\golang\sample>go mod init sample
② go run コマンド
go run .
という形でコマンドを打てば、ファイル名を指定しなくとも処理が実行されます。
ファイルが1つの場合と、全く同じコマンドです。
C:\golang\sample>go run .
8
③ go build コマンド
C:\golang\sample>go build
C:\golang\sample>.\sample
8
go build
というコマンドで、実行ファイルを作成します。ファイル名の指定は不要です。
生成された実行ファイルは、.\sample
というコマンドで実行できます。sample
はモジュール名です。
こちらも、ファイルが1つの場合と、全く同じコマンドとなります。
3. 複数のパッケージで実行
最後に、パッケージが複数ある場合です。
3-1. ソースコードの記載
次のように、sub
パッケージ(フォルダ)を作って、bar.go
というファイルを作成します。
sample
├──foo.go
└──sub
└── bar.go
main ファイル(foo.go
)には、次のように記載します。
sub パッケージの import は、フォルダを含めて sample/sub
と指定します。
package main
import "sample/sub"
func main() {
sub.Hello()
}
もう一つのファイル(sub/bar.go
)には、次のように記載します。
パッケージ名は sub
としておきます。
package sub
import "fmt"
func Hello() {
fmt.Println("hello!")
}
3-2. プログラムの実行(Modules を使用する)
Modules(go.mod
ファイル)無しで実行する方法がよく分りませんので、素直に、Modules を使用します。
① go.mod の生成
go.mod
ファイルを作成していない場合は、次のコマンドで作成します(前述参考)。
C:\golang\sample>go mod init sample
② go run コマンド
go run を使う場合は、コマンド go run .
の1行で処理が実行されます。
C:\golang\sample>go run .
hello!
③ go build コマンド
実行ファイルを作る場合は、コマンド go build
で作成します。
生成された実行ファイルは、.\sample
で実行します。
C:\golang\sample>go build
C:\golang\sample>.\sample
hello!