模块缓存

未匹配的标注

模块缓存是 go 命令存储下载模块文件的目录。 模块缓存与构建缓存不同,其中包含了编译包和其他构建构件。

默认模块位置是 $GOPATH/pkg/mod . 若要改变位置,设置 GOMODCACHE environment variable.

模块缓存没有最大大小限制,并且 go 命令不会自动删除其内容。

在同一台计算机上开发的多个Go项目可以共享缓存。不管主模块在哪里,go 命令都会使用相同的缓存。 go 命令的多个实例可以同时安全地访问相同的模块缓存。

go 命令在缓存中创建具有只读权限的模块资源文件和目录,以防止模块下载后发生意外更改。这会导致一个副作用就是造成 rm -rf 命令删除都很困难。 但是可以使用 go clean -modcache命令删除。 或者,当使用 -modcacherw 标志时,go 命令将创建具有读写权限的新目录。这增加了编辑器、测试和其他程序修改模块缓存中的文件的风险。 go mod verify命令可用于检测对主模块依赖项的修改。它扫描每个模块依赖项的提取内容,并确认它们匹配 go.sum 中的预期哈希值。

下表介绍了在模块缓存中大多数文件的用途。一些暂时性的文件(如锁文件,临时目录)被省略了。对于每个路径,$module是一个模块路径,$version是一个版本。以斜线(/)结尾的路径是目录。模块路径和版本中的大写字母用感叹号转义(如Azure会被转义为!!azure)以避免在不区分大小写的文件系统中发生冲突。

路径 用途
$module@$version/ 包含提取的模块.zip文件内容的目录。这个目录是下载的模块的根目录。如果原始模块没有go.mod文件,它就不包含go.mod文件。
cache/download/ 包含从模块代理下载的文件和来自版本控制系统的文件的目录。这个目录的布局遵循GOPROXY协议,所以当由HTTP文件服务器提供服务或用file://URL引用时,这个目录可以作为一个代理使用。
cache/download/$module/@v/list 已知版本列表。(见 GOPROXY 协议). 这可能会随着时间的推移而改变,所以go命令通常会获取一个新的副本而不是重新使用这个文件。
cache/download/$module/@v/$version.info 关于版本的JSON元数据。(见GOPROXY协议)。这可能会随着时间的推移而改变,所以go命令通常会获取一个新的副本而不是重新使用这个文件。
cache/download/$module/@v/$version.mod 当前版本的go.mod文件(见GOPROXY协议)。如果原始模块没有go.mod文件,这就是一个没有要求的合成文件。
cache/download/$module/@v/$version.zip 模块的压缩内容(见GOPROXY协议模块压缩文件)。
cache/download/$module/@v/$version.ziphash .zip文件中的文件加密哈希值。注意,.zip文件本身没有被散列,所以文件的顺序、压缩、排列和元数据都不会影响散列值。当使用一个模块时,go命令会验证这个哈希值是否与go.sum中的相应行一致。go mod verify 命令会检查模块.zip文件和提取目录的哈希值是否与这些文件相符。
cache/download/sumdb/ 包含从checksum数据库下载的文件的目录(通常是sum.golang.org)。
cache/vcs/ 包含直接从源头获取的模块的克隆的版本控制库。目录名称是由版本库类型和URL得出的十六进制编码的哈希值。仓库在磁盘上的大小是经过优化的。例如,在可能的情况下,克隆的Git仓库是裸露的和浅层的。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/go-mod/1.17/mod...

译文地址:https://learnku.com/docs/go-mod/1.17/mod...

上一篇 下一篇
贡献者:4
讨论数量: 0
发起讨论 只看当前版本


暂无话题~