Go言語 GOPATH気にしなくてもよくなった

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 の際に自動で依存パッケージはダウンロードされる。

コメントを残す