标准答案

  1. 提交 go.mod 和 go.sum,CI 使用只读或下载校验模式,避免构建过程中悄悄改依赖。
  2. 依赖升级要检查模块路径、语义版本、工具链版本、漏洞和 API 兼容性。
  3. 私有模块需要明确代理、校验和和凭据边界,不能把 token 打进日志。
  4. 保留旧制品和 go.mod 变更,灰度验证性能、二进制大小和运行时行为。

题目解析

go.mod 描述模块和版本要求,go.sum 保存依赖校验和;CI 应使用固定 Go 工具链、受控代理和只读下载,避免构建过程中悄悄改变依赖。

CGO、C 库、架构、证书、时区和基础镜像会影响二进制运行。私有模块的 GOPRIVATE、代理和凭据也要隔离,不能把 token 写入日志。

依赖升级要保留旧制品,验证 API、漏洞、性能、二进制大小和运行时行为。锁文件可复现的是输入,不是替代集成和灰度验证。

常见误区

  • 误区:只提交 go.mod 不提交 go.sum。改正:提交并审查完整校验和变化,CI 使用一致下载策略。
  • 误区:CI 直接 go get 最新版本。改正:通过明确升级变更和锁定版本进行审查、测试和回滚。
  • 误区:CGO 和基础镜像变化不纳入验证。改正:在目标 OS/架构和镜像中构建、启动和压测。

作者信息