2021年5月現在、Go言語のパッケージ管理はGo Modulesが標準となっています。
今回はGo Modulesを利用してGo言語を実行する手順について紹介します。
ローカル環境で初めてGo言語を実行する人向けの記事となっています。
今回利用するGoのバージョンは1.16.3です。
目次
作業ディレクトリの作成・移動
まずは作業ディレクトリの作成と移動をします。
$ mkdir go-example && cd $_
Go Modulesの初期化
go mod init [モジュール名]
でGo Modulesの初期化をします。
モジュール名にはモジュールの公開パスを指定するのが正確ですが、公開前提でなければパスでなくても問題ありません。
### サンプルコードなどであれば以下のような感じでOK
$ go mod init go-example
### 公開前提の場合はモジュールのパスを指定する
$ go mod init github.com/nishina555/go-example
以下のようなgo.mod
が作業ディレクトリに作成されればOKです。
go.mod
module go-example
go 1.16
必要なパッケージをインストールする
たとえば以下のようなmain.go
を作成したとします。このファイルを実行するにはrsc.io/quoteが必要です。
main.go
package main
import (
"fmt"
"rsc.io/quote"
)
func main() {
fmt.Println(quote.Hello())
}
importに記載されたパッケージはgo get
もしくはgo mod tidy
でインストールします。
コマンドによって実行される内容は以下の通りです。
コマンド | 実行内容 |
---|---|
go get [パッケージ名] | 指定したパッケージのインストール |
go get | importに記載されたパッケージのインストール |
go mod tidy | importに記載されたパッケージのインストール。 不要なパッケージの削除 |
パッケージをインストールするとgo.mod
およびgo.sum
に情報が反映されます。
### パッケージのインストール
$ go mod tidy
### パッケージがインストールされると go.sumが作成される
$ ls
go.mod go.sum main.go
### go.modに rsc.io/quote の情報が追加されている
$ cat go.mod
module go-example
go 1.16
require rsc.io/quote v1.5.2
### go.sumに rsc.io/quote をインストールした際のチェックサム情報が追加されている
$ cat go.sum
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:qgOY6WgZOaTkIIMiVjBQcw93ERBE4m30iBm00nkL0i8=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
rsc.io/quote v1.5.2 h1:w5fcysjrx7yqtD/aO+QwRjYZOKnaM9Uh2b40tElTs3Y=
rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0=
rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
モジュールの依存するパッケージ一覧はgo list -m all
やgo mod graph
で確認できます。
### 依存パッケージ一覧
$ go list -m all
go-example
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c
rsc.io/quote v1.5.2
rsc.io/sampler v1.3.0
### 依存関係の表示
$ go mod graph
go-example rsc.io/quote@v1.5.2
rsc.io/quote@v1.5.2 rsc.io/sampler@v1.3.0
rsc.io/sampler@v1.3.0 golang.org/x/text@v0.0.0-20170915032832-14c0d48ead0c
go get
やgo mod tidy
によってインストールされたパッケージは$GOPATH/pkg/mod
に保存されます。
### golang.org や rsc.io が作成されている
$ ls $GOPATH/pkg/mod/
cache golang.org rsc.io
Goファイルのコンパイルと実行
go build
でGoファイルのコンパイルをし、作成されたバイナリファイルを実行します。
### コンパイルしてバイナリファイル(main)を作成
$ go build main.go
### バイナリファイルを実行
$ ./main
Hello, world.
以下のようにするとワンライナーでコンパイルと実行ができます。
$ go build main.go && ./main
Hello, world.
go run
を利用すると、バイナリファイルを作成せずに直接Goファイルの実行ができます。
ただしgo run
はgo build
とは異なり、importされたパッケージしか読み込まないので注意が必要です。
$ go run main.go
Hello, world.
参考: go buildによるパッケージの自動インストールについて
Go 1.15まではgo build
でビルドだけでなく、パッケージのインストールも行われました。
しかし、Go 1.16からはgo build
によるパッケージのインストールが廃止されました。
ですので、パッケージのインストールが必要なGoファイルを実行する場合、Go 1.16では『go mod tidy
or go get
』 → 『go build
』という手順になります。
まとめ:
- 『go mod init』でGo Modulesの初期化
- 実装をする
- 『go get』もしくは『go mod tidy』で必要なパッケージをインストール
- パッケージが不要になったら『go mod tidy』で削除
- 『go build』でコンパイル後、、バイナリファイルを実行。あるいは『go run』でコンパイル&実行
Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!