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

What does the go.work.sum file track in Go 1.18?

我刚刚在现有项目上试用了 Go 1.18 workspace。考虑以下项目目录结构:

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

Per documentation,我在项目根目录下运行命令go work init ./app。此命令按预期创建了一个 go.work 文件,但它也创建了一个非预期的 go.work.sum 文件。

令人困惑的是go.work.sum引用了两个可以在go.sum中找到的模块,但是在go.sum和[=14之间进行比较时每个模块的版本并不相同=].那么还有一个问题,为什么go.work.sum只引用了这两个模块,而其他的none呢?请注意,工作区内只有一个模块。

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

相关功能提案中提到了 go.work.sum 文件(似乎没有其他地方?):

https://go.googlesource.com/proposal/+/master/design/45713-workspace.md#files

The go command will use the collective set of go.sum files that exist across the workspace modules to verify dependency modules, but there are cases where the go.sum files in the workspace modules collectively do not contain all sums needed to verify the build: The simpler case is if the workspace go.mod files themselves are incomplete, the go command will add missing sums to the workspace‘s go.work.sum file rather than to the module’s go.sum.

提案(同上link)还描述了另一个用例,其中各个项目都没有从模块的某个特定版本导入包,而是将其作为间接依赖项,因此缺少校验和对于模块的代码。

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