为什么从Go 1.17版本开始go.mod文件会出现两个require块?
关于Go 1.17版本go.mod出现两个require块的说明
这是Go 1.17引入的正常特性,不属于配置错误,不会影响你的项目正常构建运行。
两个块的具体含义
- 第一个require块
包含两类依赖:一是你项目代码中直接引入的直接依赖(你给出的示例中前三个没有// indirect标记的包就属于这一类);二是这些直接依赖编译、运行所需的间接依赖,所有这个块里的依赖都会参与你主应用的编译流程。 - 第二个require块
所有内容都是带// indirect标记的测试相关间接依赖,这些是你的项目测试代码、或者第三方依赖包的测试代码需要用到的依赖,不会参与主应用的编译,只有执行go test等测试相关操作时才会被用到。
补充说明
这个拆分设计是Go 1.17依赖图裁剪特性的组成部分,目的是提升依赖解析、主程序构建的速度,块的拆分完全由Go工具链自动处理。如果不习惯两个块的展示形式,你可以手动把第二个块的内容合并到第一个块中,不会产生任何功能影响,后续执行go mod tidy等命令时,工具链也可能根据依赖的变化自动调整块的拆分形式。
内容的提问来源于stack exchange,提问作者jozo
相关产品推荐
相关产品推荐

