症状
拉取依赖时在按 go.sum 校验模块的阶段报 checksum mismatch。常见原因是模块缓存损坏、sum 条目过期、代理提供了被改写的内容,或已发布的标签发生变化。CI 失败而本地缓存掩盖问题,因此环境本身也是诊断的一部分。
诊断
用 go clean -modcache 清理缓存后重新下载;用 go mod verify 复核;检查 GOPROXY 与 GOSUMDB。
go clean -modcache
根因
下载到的模块内容与其 go.sum 记录的哈希不一致,原因是缓存损坏、代理提供被修改内容,或标签在发布后变更。
修复
清理模块缓存并重新下载;若 sum 确实因合法重发布而过期,用 go mod tidy 更新;若标签疑似被移动,应作为供应链风险调查而非静默接受。
验证
运行 go mod verify 与完整构建确认都通过,最好在缓存为空的全新环境验证。跨环境哈希一致才算修复,而非本地绕过。
常见陷阱
用 GONOSUMCHECK 或 GOFLAGS=-mod=mod 关闭校验会移除供应链防护;应定位不匹配的根源。