search
LoginSignup
19
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

【備忘】Go 言語のビルドと実行(3パターン)

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 ファイルに次のソースコードを書きます。

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 ファイルが生成されます。

go.mod
module sample

go 1.17

module samplesample は、モジュール名です。この名前で実行ファイルが生成されます。
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)には、次のように記載します。

foo.go
package main

import "fmt"

func main() {
    fmt.Println(add(3, 5))
}

もう一つのファイル(bar.go)には、次のように記載します。
パッケージは同一なので、こちらも package main としておきます。

bar.go
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 と指定します。

foo.go
package main

import "sample/sub"

func main() {
    sub.Hello()
}

もう一つのファイル(sub/bar.go)には、次のように記載します。
パッケージ名は sub としておきます。

sub/bar.go
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!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
19
Help us understand the problem. What are the problem?