go mod verify校验本地缓存模块与go.sum中记录的哈希值,包括模块源码zip解压后所有go文件及go.mod内容的h1:哈希、以及go.mod文件单独计算的哈希;不下载、不联网、不更新go.sum。

go mod verify 会校验哪些内容
go mod verify 只比对本地已缓存模块($GOPATH/pkg/mod)与 go.sum 中记录的哈希值,不重新下载、不访问网络、不触发 go.sum 更新。它检查两类哈希:
- 模块源码 zip 包解压后所有 Go 文件 +
go.mod内容的 SHA-256(以h1:开头) - 模块根目录下
go.mod文件单独计算的校验和(以go.mod后缀结尾)
注意:它不校验 go.sum 自身是否被篡改,也不验证远程 sum.golang.org 的背书——那是 go build 或 go mod download 才做的。
什么时候必须运行 go mod verify
以下场景建议立即执行 go mod verify:
- CI/CD 构建前,防止缓存污染或代理劫持导致依赖异常
- 团队新成员首次
git clone后,确认go.sum和本地模块一致 - 执行过
go clean -modcache或手动删过pkg/mod目录后 - 发现
go build报verified sum mismatch但不确定是哪一环出问题时
它比 go build 更轻量、更快,且失败时错误信息更聚焦于“哪个模块哈希不匹配”,便于快速定位。
校验失败常见原因和应对方式
输出 some modules failed verification 通常不是网络问题,而是本地状态异常:
-
go.sum被手动编辑过 → 删掉重来:先go clean -modcache,再go mod download,最后go mod verify - 用了
replace指向本地路径,但换机器后路径不存在 → 检查go.mod里的replace行,临时注释掉再试 - 模块缓存损坏(尤其在 NFS 或共享磁盘环境)→
go clean -modcache是最稳妥的清理方式 -
go.sum缺少某模块条目 → 运行go mod tidy -v补全,它会扫描代码引用并写入缺失哈希
不要跳过 go mod verify 直接 go build —— 如果校验失败,go build 会报更模糊的 checksum mismatch,且可能卡在下载阶段。
go mod verify 不能替代 go build 的远程校验
go mod verify 是纯本地比对,它不连接 sum.golang.org。真正防供应链攻击的是 go build 或 go mod download 的三步校验:
- 本地哈希比对
- 向
GOSUMDB查询该哈希是否在官方透明日志中存在 - 拒绝使用未被背书或已被撤销的哈希
所以 CI 流程里,应先 go mod verify 快速筛出本地一致性问题,再跑 go build 完成最终可信构建。两者缺一不可,但目的不同。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











