我刚刚在一个现有的项目上试用了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.sum
和go.work.sum
相比,每个模块的版本并不相同。还有一个问题:为什么在go.work.sum
中只引用这两个模块,而没有引用其他模块?注意,工作区中只有一个模块。
go.work.sum
文件跟踪什么?有任何记载吗?
发布于 2022-03-25 06:51:32
go.work.sum
文件在相关的特性建议中提到(似乎没有其他地方?):
https://go.googlesource.com/proposal/+/master/design/45713-workspace.md#files
go命令将使用整个工作区模块中存在的一组集体的
go.sum
文件来验证依赖模块,但在某些情况下,工作区模块中的go.sum
文件集体不包含验证构建所需的所有总和:更简单的情况是,如果工作区go.mod
文件本身不完整,则 go命令将向工作区的go.mod
文件中添加丢失的和,而不是添加到模块的go.sum
文件中。
该建议(与上面的链接相同)还描述了另外一个用例,即两个单独的项目都没有从某个特定版本的模块导入包,而是要求它作为间接依赖项,从而忽略了模块代码的校验和。
因此您的子模块可能会显示其中一种情况。如果是前者,我希望在子模块上运行go mod tidy
会使所有内容同步,并消除对go.work.sum
的需求。根据您的描述,听起来似乎是后者,因此需要go.work.sum
来跟踪丢失的校验和。
https://stackoverflow.com/questions/71611196
复制相似问题