Golang中的模块缓存在哪里?

时间:2018-09-01 09:46:39

标签: go vgo

启用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
...

6 个答案:

答案 0 :(得分:16)

对于Go 1.11,它们存储在

$GOPATH/pkg/mod

答案 1 :(得分:3)

模块缓存存储在$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文件设置为具有replace指令以指向该可变副本。

答案 2 :(得分:1)

我在Macos 10.13.6上,使用go1.11 darwin/amd64并且echo $GOPATH为空。

我在$HOME/go/pkg/mod

中找到了我的模块

答案 3 :(得分:1)

如果您要清理缓存,请使用命令go clean --modcache

如果您只需要更新某些依赖项,则可能要从中清除有关此依赖项的信息

  • go.mod
  • go.sum
  • vendor / modules.txt

答案 4 :(得分:1)

在终端运行这个

go env GOMODCACHE

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

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

答案 5 :(得分:0)

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

go env|grep CACHE

要清除缓存,请根据要清除的缓存类型使用 go clean -modcachego clean -cache