1 回答

TA贡献1796条经验 获得超10个赞
因为在 Go 1.17 中,模块图已更改为启用修剪和延迟加载。第二个块包含间接依赖关系。require
https://golang.org/doc/go1.17#go-command
如果模块指定 go 1.17 或更高版本,则模块图仅包含其他 go 1.17 模块的直接依赖关系,而不包括其完全的传递依赖关系。[...]
[...]如果模块在其 go.mod 文件中指定 go 1.17 或更高版本,则其 go.mod 文件现在包含一个显式 require 指令,用于提供可传递导入包的每个模块。(在以前的版本中,go.mod 文件通常只包含对直接导入的包的显式要求。
由于在扩展的 Go 1.17 go.mod 文件中,显式需求的数量可能要大得多,因此 go 1.17 模块中对间接依赖项的新添加需求将保留在与包含直接依赖项的块不同的需求块中。
注意:您在问题中发布的文件在第一个 require 块中具有依赖项。根据引用的文档中的“新添加”一词,我怀疑这是因为这些依赖项已经在那里列出并且没有重新排列它们。如果您:go.mod
//indirect
//indirect
go mod tidy
手动删除其中一个
和/或重新创建 Go 版本设置为 或更高的文件
go.mod
1.17
和/或运行
go mod tidy -go=1.17
然后它将在两个块中分离直接和依赖关系。无论如何,这是一种视觉上的便利,文档并不要求创建两个单独的块。//indirect
其他参考资料:
行为依赖于 的指令: https://go.dev/ref/mod#go-mod-file-go
go.mod
go
- 1 回答
- 0 关注
- 259 浏览
添加回答
举报