go mod verify 报 checksum mismatch 是因本地 go.sum 记录与实际模块内容不一致,常见于手动修改依赖、replace 指向本地路径或 go.sum 损坏;修复应删 go.sum 后运行 go mod tidy。

go mod verify 为什么总报 checksum mismatch
因为 go mod verify 不查网络,只比对本地 go.sum 文件里记录的哈希值和当前模块实际内容是否一致。一旦你手动改过依赖代码、用 replace 指向本地路径、或 go.sum 被删/损坏,就会触发这个错误。
- 常见现象:
verifying github.com/some/pkg@v1.2.3: checksum mismatch - 不是网络问题,也不是包本身坏了,是本地缓存和记录对不上
- 如果刚执行过
go mod download,但go mod verify仍失败,说明go.sum没更新 —— 它不会自动重写 - 修复方式:删掉
go.sum再跑go mod tidy(会重新下载并写入校验和),而不是直接go mod verify
go mod download 的实际作用范围
go mod download 只下载模块到本地缓存($GOPATH/pkg/mod/cache/download),不修改 go.mod 或 go.sum,也不编译项目。它像“预加载”,为后续构建或验证提供原材料。
- 默认下载
go.mod中所有直接和间接依赖(包括indirect标记的) - 加
-json参数可看下载详情:go mod download -json github.com/gorilla/mux@v1.8.0 - 不加版本号会下载最新 tagged 版本;加
@latest也一样,但不推荐用于生产环境 - 如果模块在
go.sum里已有校验和,go mod download不会重新校验 —— 它信任本地缓存,直到go mod verify或构建时才真正校验
verify 和 download 怎么配合才不白忙
单独跑 go mod download 后立刻 go mod verify,大概率失败。因为 download 不碰 go.sum,而 verify 全靠它。两者必须通过 go mod tidy 或实际构建来桥接。
- CI 场景推荐流程:
go mod download→go mod tidy -v(生成/更新go.sum)→go mod verify -
go mod tidy是关键粘合剂:它会检查依赖树、补全缺失项、更新go.sum,再调用 download 补齐没缓存的模块 - 如果只想验证不改动,用
go list -m -u all看有没有可用更新,比盲目 download + verify 更轻量 - 注意:
go build或go test也会隐式触发 download 和 verify,所以日常开发中很少需要手动 verify
go.sum 文件被污染后怎么救
go.sum 不是只读文件,但随意编辑极易出错。最稳妥的方式不是修某一行,而是重建整个校验体系。
立即学习“go语言免费学习笔记(深入)”;
- 删掉
go.sum后运行go mod tidy,会重新生成全部校验和(前提是网络通畅、模块未被撤回) - 如果某个模块被撤回(
410 Gone),go mod tidy会失败,此时只能手动在go.mod中降级或换源 - 用
go mod graph | grep xxx查清谁引入了问题模块,比硬啃go.sum更快 - 别用文本编辑器直接删
go.sum里的某几行 —— 校验和是按模块+版本成对出现的,漏删会导致解析失败
go mod tidy。










