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

Sam*_*ann 15 go go-modules go-work

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

project-root/
|-- app/
|  |-- go.mod
|  |-- go.sum
Run Code Online (Sandbox Code Playgroud)

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

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

该文件跟踪什么go.work.sum?它在任何地方都有记录吗?

bla*_*een 11

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

\n

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

\n
\n

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

\n
\n

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

\n

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

\n

  • 我在 Go 存储库中创建了一个问题,将 go.work.sum 上的文档从提案转移到官方文档:https://github.com/golang/go/issues/51941 (6认同)