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文件(似乎没有其他地方提到过?):
https://go.googlesource.com/proposal/+/master/design/45713-workspace.md#files
\n\n\ngo 命令将使用
\ngo.sum工作区模块中存在的文件集合来验证依赖模块,但在某些情况下,go.sum工作区模块中的文件总共不包含验证构建所需的所有总和:更简单的情况是,如果工作区go.mod文件本身不完整,go 命令会将缺失的总和添加到workspace\xe2\x80\x98sgo.work.sum文件而不是 module\xe2\x80\x99sgo.sum。
该提案(与上面的链接相同)还描述了另一种用例,其中两个项目都没有从模块的某个特定版本导入包,而是需要它作为间接依赖项,从而缺少模块代码的校验和。
\n所以你的子模块可能会显示这些情况之一。如果是前者,我希望go mod tidy在子模块上运行使所有内容同步并消除对go.work.sum. 根据您的描述,听起来像是后者,然后go.work.sum有必要跟踪丢失的校验和。