- Contents -
go 1.9 の頃からあまりGo言語を触っていなかったんですが、
現在、go は、1.13
vgo というModules機能が標準で備わっているので、
基本このvgo (Moudles)に沿ったプロジェクトを作成するのが最近のようです。
Go言語のパッケージ管理
goのパッケージ管理方法は主に下記の方法があります。
vgo (Modules) モード
go.modファイルに依存関係を記述
依存パッケージは、go build などの際に自動でダウンロードされる。
go.sumファイルというロックファイルが生成される。
node.js のpackage.json package-lock.json の関係性と同じである。
vendorモード
プロジェクトルートにvenderというディレクトリを用意すると、
GOPATH内のパッケージよりも優先的に参照させることができる。
今までのGOPATHによる管理
開発しているプロジェクトも含めて、
すべてGOPATH配下に依存パッケージも配置されていないといけない。
vgoによってGOPATHを意識しなくてもよくなった
go.modをプロジェクトルートに配置することで、vgoモードで動作します。
GOPATH配下にプロジェクトを配置する必要がないので、
自分の好きなところにプロジェクトを作成できます。
go.modの最初には、プロジェクトの実際のモジュール名を記載します。
このモジュール名は、github.com など、実際にインポートする際のモジュール名にします。
例えば、github.com/user/goproject
のようなものです。
他のプロジェクトからインポートする必要がないのであれば、
実際にはなんでもOKです。
コマンドでgo.modを自動生成できます
go mod init <ModuleName>
自プロジェクトのサブパッケージをインポートする場合も、
このモジュール名でインポートすることができます。
昔のGOPATHだけの時は、
プロジェクトをGOPATH内に配置しておかないとインポートができませんでした。
相対PATHでインポートする方法もありましたが、推奨されていませんし、
go 1.11 からは既に使えなくなったようです。
まとめ
最近のGo言語(1.13)では vgoをつかう。
vgoが有効な状況では、GOPATHを意識する必要がなくなっている。
プロジェクトをGOPATH配下に配置しなくても良くなった。
vgoを有効にするには、go.modファイルを配置する。
$GOPATH/pkg/mod
配下に依存パッケージがダウンロードされる。
go build
または、go test
の際に自動で依存パッケージはダウンロードされる。