ci报错是因为go build在-mod=readonly模式下严格校验go.sum,其缺失或为空导致checksum mismatch;必须提交go.sum与go.mod配套,否则构建中断。

go.sum没提交,为什么CI直接报错?
因为go build在-mod=readonly(默认)模式下,会严格比对本地缓存模块的哈希值和go.sum里记录的是否一致。如果go.sum没进 Git,CI 拉代码后只有go.mod,go.sum为空或缺失——Go 工具链拒绝构建,直接退出并报verifying ...: checksum mismatch或missing go.sum entry。
怎么快速补救:本地已有正常go.sum但没提交
这不是依赖冲突,是版本锁定文件缺失。别删go.sum重生成,那会引入新哈希、破坏团队一致性。
- 确认当前环境能正常构建:
go build成功且无警告 - 检查
go.sum是否真实存在且非空:ls -l go.sum && head -n 3 go.sum - 直接提交:
git add go.sum && git commit -m "chore: add missing go.sum" - 推送到远端后,CI 就能拿到完整校验信息,不再卡住
为什么有人会漏掉go.sum?常见诱因
go.sum不像go.mod那样在每次go get后显式变更,它更新更“静默”,容易被忽略。
初始化并管理阿里云SDK Go 客户端,涵盖 sync.Once 单例、goroutine 安全、endpoint 与 region 配置、VPC 端点及调试。
-
.gitignore里误加了go.sum(尤其从旧模板复制时) - 用
go mod tidy后只git add go.mod,忘了go.sum - CI 脚本里执行
go mod download但没触发go.sum写入(比如没运行go build或go test) - 多人协作中某人用
go get -u升级后没提交go.sum,其他人拉代码就断
如何从流程上杜绝这类问题
靠人盯不如靠机制。关键不是“记得提交”,而是让漏提变成不可能。
- 在
pre-commit钩子里加检查:git status --porcelain go.sum | grep '^??' && echo "ERROR: go.sum not staged" && exit 1 - CI 流水线第一步跑
git diff --quiet HEAD -- go.sum || (echo 'go.sum changed but not committed'; exit 1) - 团队文档明确写:“
go.mod和go.sum必须同时提交,缺一不可”——不解释原理,只列动作
真正麻烦的不是补一个go.sum,而是当它长期没提交,不同人本地生成的校验和已开始分叉,再合并时go.sum冲突频发、难以分辨哪一行该保留。越早统一,越少擦屁股。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










