Go modules について

公開:2020/10/20
更新:2020/10/21
1 min読了の目安(約1100字TECH技術記事

(作成2020.10.20)

Go modules とは

以前の記事「Go言語 Hello World」で作業ファイルは「go/src」以下に置くとよいと書きましたが、実はこれバージョン1.11までの話。もちろんこのままでOKだし、私自身今のところこのままでコーディングしているのもありますが、実はこの縛りはすでに対応されていてもっとたくさんのプロジェクトを抱えた人にとってはコードがあちこちに散らからないように整理する仕組みが設けられています。それがGo modulesです。

もう少しこれまでの仕様の話をさせて

引用するパッケージ(ライブラリ)もgo/src以下に保存されるので自分のプロジェクトと紛れ込むことになり(まぁ自分で把握してないわけはないので問題ないといえばないのだが。)、特にプロジェクトごとにライブラリのバージョンを変えたい(例えば、昔に作ったプロジェクトが新しいライブラリだと動かないとか、動くかどうか確認するのが面倒とかで)というようなことができませんでした。それで、プロジェクトの中に「vendor」という名前でディレクトリを作成し、その中に適用するライブラリを保存することでバージョン管理をすることを可能にしてました。govendorというサードパーティーツールを使って

$ govendor add +e

とすると自動的に保存してくれます。

Go modules ができました

バージョン1.12以降はGo modulesを使います。ちなみにバージョン1.11は移行期バージョンなのでgo envを次のように設定することで使用可能になります。

go env -w GO111MODULE=on

Go modulesの使い方

とりあえずは次のコマンドを打ち込んでみましょう。

$ mkdir testprj
$ cd testprj
$ go mod init testprj
$ cat go.mod
$ touch main.go
$ code main.go
$ go build
$ cat go.mod
$ go get ライブラリ
$ cat go.mod
$ go mod tidy

main.goは引用するパッケージ(ライブラリ)を含めて作成します。

既存プロジェクトへの適用

これもいろいろ書くとごちゃごちゃするので要点だけ。

$ cd oldprj
$ go mod init oldprj
$ go build