go 1.18中的go.work.sum文件跟踪什么



我刚刚在一个现有项目上试用了Go 1.18工作区。考虑以下项目目录结构:

project-root/
|-- app/
|  |-- go.mod
|  |-- go.sum

根据文档,我在项目的根目录中运行了命令go work init ./app。此命令按预期创建了一个go.work文件,但也创建了一份不期望的go.work.sum文件。

令人困惑的是,go.work.sum引用了go.sum中的两个模块,但在go.sumgo.work.sum之间进行比较时,每个模块的版本并不相同。还有一个问题是,为什么go.work.sum中只引用了这两个模块,而没有引用其他模块?请注意,工作区中只有一个模块。

go.work.sum文件跟踪什么?有记录吗?

go.work.sum文件在相关的功能提案中被提及(似乎没有其他地方?(:

https://go.googlesource.com/proposal/+/master/design/45713 workspace.md#文件

go命令将使用工作区模块中存在的go.sum文件的集合来验证依赖模块,但在某些情况下,工作区模块的go.sum文件并不包含验证构建所需的所有总和:更简单的情况是,如果工作区go.mod文件本身不完整,go命令会将丢失的和添加到工作区的go.work.sum文件中,而不是添加到模块的go.sum

该提案(与上面的链接相同(还描述了另一个用例,即两个单独的项目都没有从某个特定版本的模块导入包,而是要求将其作为间接依赖项,从而缺少模块代码的校验和。

因此,您的子模块可能会显示其中一种情况。如果是前者,我希望在子模块上运行go mod tidy可以使所有内容同步,并消除对go.work.sum的需求。根据您的描述,听起来像是后者,那么go.work.sum有必要跟踪丢失的校验和。

最新更新