golang的模块缓存在哪里?

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,它们存储在 $

当我启用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
中,如果未设置
$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:

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的答案。