golang的模块缓存在哪里?
当我启用gomodules并构建go程序时,所需的软件包就会下载 但是我在golang的模块缓存在哪里?,go,vgo,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 ... 对于Go 1.11,它们存储在 $
$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
中,如果未设置$GOPATH
,则存储在$HOME/go/pkg/mod
中
注意:通常,模块缓存是只读的,并且是不可变的缓存。因此,您不应该尝试在缓存中编辑内容,也不应该从缓存中运行go
命令
模块缓存包含zip文件、未打包的模块源代码以及VCS缓存(不使用代理时)。缓存通常包含单个依赖项的多个版本
如果要检查模块缓存中依赖项的代码,一个快捷方式是通过以下方式直接cd
到未打包依赖项的位置:
cd $(go list -f '{{.Dir}}' -m github.com/foo/bar)
这要求报告模块缓存中模块github.com/foo/bar
的目录位置,默认为当前模块中当前使用的任何版本
考虑到缓存是不可变的,一个相关的问题是如何编辑依赖项(例如,如果要添加调试日志,或者可能是为了准备发送依赖项的上游修复)。此时的一个常见解决方案是使用,它创建依赖项的可变副本(默认情况下在
$HOME/gohack
中,但位置由$gohack
变量控制)gohack
还将当前的go.mod
文件设置为具有指向该可变副本的指令。如果要清除缓存,则有一个命令go clean--modcache
如果您只需要更新某些依赖项,您可能希望从中清除有关此依赖项的信息
- go.mod
- 加油
- 供应商/modules.txt
go env|grep CACHE
要清除缓存,请根据要清除的缓存类型,使用go clean-modcache
或go clean-cache
。在终端中运行此操作
go env GOMODCACHE
-打印所有Go环境信息
go env NAME-打印特定的环境变量。注意,如果
$GOPATH
为空,则在Linux上的go帮助模块
中记录了这一点。模块存储在/home//go/pkg/mod
中@如果启用go模块,则与macOS.GOPATH相同的ifnotak没有意义。有关当前答案,请参阅。是否将$GOPATH设置为$HOME/go?$GOPATH默认为$HOME/go on go 1.11并向前。您应该在答案中包含更多解释。您提供的答案与Chris在2020年12月30日发布的答案几乎相同。你的答案应该在现有答案的基础上有所改进。我认为对于go的最新版本来说,这个答案更准确,而且它确实改进了Chris的答案。