为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
Qyouu 2022-11-23 20:02:32

我刚刚在现有项目上试用了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.sumgo.work.sum


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


查看完整描述

1 回答

?
眼眸繁星

TA贡献1592条经验 获得超9个赞

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


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


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


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


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


查看完整回答
反对 回复 2022-11-23

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信