Gomodulesを有効にしてgoプログラムをビルドすると、必要なパッケージがダウンロードされます。
しかし、$GOPATH/src/
または$GOPATH/src/mod
でそれらを見つけることができません。
それらはどこに保存されますか?
export GO111MODULE=on
go mod init
go build main.go
go: finding github.com/sirupsen/logrus v1.0.6
go: downloading github.com/sirupsen/logrus v1.0.6
...
Go 1.11の場合、これらは
$GOPATH/pkg/mod
Macos 10.13.6を使用しています。go1.11 darwin/AMD64
を使用しており、echo $GOPATH
は空です。
$HOME/go/pkg/mod
でモジュールを見つけました
モジュールキャッシュは$GOPATH/pkg/mod
に保存されます。$HOME/go/pkg/mod
が設定されていない場合は$GOPATH
に保存されます。
注:一般に、モジュールキャッシュは読み取り専用であり、不変のキャッシュになることを意図しています。そのため、ここで何かを編集したり、キャッシュ内からgo
コマンドを実行したりしないでください。
モジュールキャッシュには、Zipファイル、展開されたモジュールソースコード、およびVCSキャッシュ(プロキシを使用しない場合)が含まれます。キャッシュには、多くの場合、単一の依存関係の複数のバージョンが含まれます。
モジュールキャッシュ内の依存関係のコードを調べたい場合、ショートカットの1つとして、次の方法でcd
を使用して、展開された依存関係の場所に直接移動できます。
cd $(go list -f '{{.Dir}}' -m github.com/foo/bar)
go list に、モジュールキャッシュ内のモジュールgithub.com/foo/bar
のディレクトリの場所を報告するよう要求します。デフォルトは、現在のモジュールで現在使用しているバージョンです。
キャッシュが不変であることを意図している場合、関連する質問は、依存関係をどのように編集するかです(たとえば、デバッグログを追加する場合、または依存関係のアップストリーム修正を送信する準備中)。この時点での一般的な解決策は、依存関係の変更可能なコピーを作成する gohack を使用することです(デフォルトでは$HOME/gohack
ですが、場所は$GOHACK
変数によって制御されます)。 gohack
は、現在のgo.mod
ファイルにも、その変更可能なコピーを指す replace ディレクティブを設定します。