← 中文资源

简体中文版本

Go 下载模块时报 checksum mismatch

通过清理缓存、核对 go.sum 以及检查代理与标签,解决模块校验和不匹配。

阅读英文原文

症状

拉取依赖时在按 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 关闭校验会移除供应链防护;应定位不匹配的根源。