为什么这两个文件总是一起出现
很多刚接触 Go 模块的人都会问:既然已经有 go.mod 了,为什么还要有一个 go.sum?
简单说:
go.mod负责描述你需要哪些模块go.sum负责记录这些模块内容的校验信息
它们不是重复,而是分工不同。
go.mod 负责什么
go.mod 更像是项目依赖声明:
- 当前模块名是什么
- 当前 Go 版本是什么
- 依赖了哪些模块
- 是否存在
replace、exclude之类的规则
go.sum 负责什么
go.sum 更像校验账本。
当 Go 下载依赖时,会把模块内容对应的哈希写进去。后面再次获取依赖时,Go 会校验实际拿到的内容是否和历史记录一致。
为什么不要手动乱改 go.sum
很多时候 go.sum 的变化只是因为:
- 下载了新依赖
go mod tidy清理了无用项- 间接依赖版本发生变化
通常更好的做法不是手动改,而是:
1go mod tidy
我的复盘
真正理解这两个文件之后,很多看起来神秘的现象就不神秘了。以后看到 go.sum 变化,我会先从依赖下载与校验角度看,而不是把它当成多余噪音。