36

当我启用 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
...
4

6 回答 6

50

对于 Go 1.11,它们存储在

$GOPATH/pkg/mod
于 2018-09-01T10:48:00.150 回答
6

模块缓存存储在$GOPATH/pkg/mod,或者$HOME/go/pkg/mod如果$GOPATH没有设置。

注意:通常,模块缓存是只读的,旨在成为不可变缓存。因此,您永远不应该尝试在那里编辑内容,也不应该go从缓存中运行命令。

模块缓存包含 zip 文件、解压缩的模块源代码以及 VCS 缓存(不使用代理时)。缓存通常包含单个依赖项的多个版本。

如果要检查模块缓存中依赖项的代码,一种快捷方式是您可以通过以下方式cd直接找到解包依赖项的位置:

cd $(go list -f '{{.Dir}}' -m github.com/foo/bar)

这要求go list报告github.com/foo/bar模块缓存中模块的目录位置,默认为您当前在当前模块中使用的任何版本。

鉴于缓存旨在是不可变的,一个相关的问题是如何编辑依赖项(例如,如果您想添加调试日志,或者可能准备发送依赖项的上游修复)。此时一个常见的解决方案是使用gohack,它创建依赖项的可变副本(默认情况下在 中$HOME/gohack,但位置由$GOHACK变量控制)。gohack还将您的当前go.mod文件设置为具有指向该可变副本的替换指令。

于 2019-08-01T17:07:06.280 回答
5

我在 Macos 10.13.6 上,使用go1.11 darwin/amd64echo $GOPATH是空的。

我发现我的模块在$HOME/go/pkg/mod

于 2018-12-24T20:24:44.303 回答
3

如果你想清理缓存有一个命令go clean --modcache

如果您只需要更新一些依赖项,您可能希望从

  • 去.mod
  • go.sum
  • 供应商/modules.txt
于 2020-08-22T15:50:04.447 回答
3

在终端中运行它

go env GOMODCACHE

go env - 打印所有 Go 环境信息

go env NAME - 打印特定的环境变量。

于 2021-04-23T15:52:09.647 回答
2

要确定缓存位置,可以使用 go env:

go env|grep CACHE

要清除缓存,请使用go clean -modcachego clean -cache取决于要清除的缓存类型。

于 2020-12-30T09:59:46.693 回答