模块的 zip 包
模块版本分为.zip
文件。自从go
命令创建,下载和从Module代理自动提取 和版本控制存储库。但是,了解这些文件仍然有用,以了解跨平台兼容性约束或实现模块代理时。
go mod下载
命令下载一个或多个模块的zip文件,然后将这些文件提取到Module缓存中。取决于GOPROXY
和其他环境变量,go
命令可以从代理下载zip文件或克隆源控制存储库并从中创建ZIP文件。 -JSON
标志可用于查找下载ZIP文件的位置及其在模块缓存中的提取内容。
golang.org/x/mod/zip
包可用于创建,以编程方式提取或检查ZIP文件的内容。
文件路径和大小约束
模块ZIP文件的内容有许多限制。这些约束确保可以在各种平台上安全且一致地提取ZIP文件。
- 模块ZIP文件的大小可能为500 MiB 。其文件的总未压缩大小也限于500 MiB 。
go.mod
文件限制为16 MiB 。许可证
文件也限于16 MiB 。存在这些限制,以减轻对模块生态系统的用户,代理和其他部分的拒绝服务攻击。在模块目录树中包含超过500个MiB文件的存储库,应该在提交中标记模块版本,仅包含构建模块包装所需的文件;录像,模型和其他大型资产通常不需要构建。 - 模块中的每个文件zip文件必须以前缀
$module@$version/
开头,其中$module
是模块路径和$version
是版本例如,golang.org/x/mod@v0.3.0/
。模块路径必须有效,版本必须有效和规范,并且版本必须与模块路径的主要版本后缀匹配。有关特定定义和限制,请参阅Module路径和版本。 - 忽略文件模式,时间戳和其他元数据。
- 空目录(具有斜杠结尾的路径的条目)可以包含在模块zip文件中,但未提取。
go
命令不包括它创建的zip文件中的空目录。 - 创建ZIP文件时,符号链接和其他不规则文件将忽略,因为它们不在操作系统和文件系统上携带,并且没有便携方式以ZIP文件格式表示它们。
- 创建ZIP文件时,名为
vendor
的目录中的文件,因为从未使用主模块外部外部的vendor
目录。 - 在创建zip文件时忽略包含
go.mod
文件的目录中的文件,因为它们不是模块的一部分。go
命令忽略包含go.mod
文件的子目录。 - 在zip文件中没有两个文件可能在Unicode案例折叠下具有等于的路径(参见
strings.EqualFold
) 。这可确保在没有冲突的情况下在不敏感的文件系统上可以提取ZIP文件。 go.mod
文件可能会或可能不会出现在顶级目录中($module@whversion/go.mod
)。如果存在,它必须具有go.mod
(所有小写)。任何其他目录都不允许命名为go.mod
。- 模块中的文件和目录名称可以由Unicode字母,ASCII数字,ASCII空间字符(U + 0020)和ASCII标点符号
!#$%&()+,-.=@[]^_{}~
。请注意,包路径可能不包含所有这些字符。请参阅模块module.checkfilepath
和模块module.checkimportpath
差异。 - 无论案例(
CON
,com1
,NuL
,,和很快)。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: