golang中的模块缓存在哪里?
Where is the module cache in golang?
当我启用 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)
这要求 go list 报告模块缓存中模块 github.com/foo/bar
的目录位置,默认为您当前在当前模块中使用的任何版本。
鉴于缓存是不可变的,一个相关的问题是如何编辑依赖项(例如,如果您想添加调试日志,或者可能准备发送依赖项的上游修复)。此时一个常见的解决方案是使用 gohack, which creates a mutable copy of a dependency (by default in $HOME/gohack
, but the location is controlled by $GOHACK
variable). gohack
also sets your current go.mod
file to have a replace 指令指向该可变副本。
如果你想清理缓存,可以使用命令 go clean --modcache
如果您只需要更新一些依赖项,您可能希望从
中清除有关此依赖项的信息
- go.mod
- go.sum
- vendor/modules.txt
要确定缓存位置,您可以使用 go env:
go env|grep CACHE
要清除缓存,请根据要清除的缓存类型使用 go clean -modcache
或 go clean -cache
。
运行 这个在终端
go env GOMODCACHE
go env - 打印所有 Go 环境信息
go env NAME - 打印特定的环境变量。
当我启用 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)
这要求 go list 报告模块缓存中模块 github.com/foo/bar
的目录位置,默认为您当前在当前模块中使用的任何版本。
鉴于缓存是不可变的,一个相关的问题是如何编辑依赖项(例如,如果您想添加调试日志,或者可能准备发送依赖项的上游修复)。此时一个常见的解决方案是使用 gohack, which creates a mutable copy of a dependency (by default in $HOME/gohack
, but the location is controlled by $GOHACK
variable). gohack
also sets your current go.mod
file to have a replace 指令指向该可变副本。
如果你想清理缓存,可以使用命令 go clean --modcache
如果您只需要更新一些依赖项,您可能希望从
中清除有关此依赖项的信息- go.mod
- go.sum
- vendor/modules.txt
要确定缓存位置,您可以使用 go env:
go env|grep CACHE
要清除缓存,请根据要清除的缓存类型使用 go clean -modcache
或 go clean -cache
。
运行 这个在终端
go env GOMODCACHE
go env - 打印所有 Go 环境信息
go env NAME - 打印特定的环境变量。