首页/开发/CI/CD 与发布速查/Go Modules 与 GOPROXY
构建与制品管理58 条

Go Modules 与 GOPROXY

go.mod 声明依赖与版本、go.sum 记录校验和;通过 GOPROXY 控制下载来源,私有模块用 GOPRIVATE 排除公共代理与校验库。

CI/CD 与发布速查开发更新于 2026-10-13

Go Modules 与 GOPROXY 是什么

Go Modules 是 Go 的依赖管理机制:go.mod 声明模块路径、依赖与版本,go.sum 记录依赖内容的校验和。GOPROXY 决定从哪里下载模块(可指定多个源用逗号串联,direct 表示直连 VCS);私有模块用 GOPRIVATE(以及更细的 GONOPROXY / GONOSUMDB)排除在公共代理与校验库之外,避免请求外发失败或泄露内部路径。

基本信息

文件go.mod(require/版本)、go.sum(校验和)
代理GOPROXY(如 https://goproxy.cn,direct)
私有GOPRIVATE / GONOPROXY / GONOSUMDB 控制私有模块范围
只读模式-mod=readonly(Go 1.16 起为默认)防止构建改动 go.mod

典型使用场景

  • CI 依赖下载:配置稳定 GOPROXY,避免直连 VCS 受网络与限流影响。
  • 私有模块:GOPRIVATE 划出范围,内部模块走内网源、校验库放行。
  • 内网/离线构建:自建模块代理(如 Athens 或静态代理)做缓存,断网环境也能构建。
  • 版本锁定:go.mod + go.sum 提交入仓,任何机器重建同一版本集。
  • 依赖审计:审查 go.sum 与版本升级 PR,掌握引入的传递依赖。

CI 常用设置

CI 常用设置
export GOPROXY=https://goproxy.cn,direct
export GOPRIVATE=git.example.com/internal/*
export GOFLAGS=-mod=readonly
go mod download
go build ./...

环境变量速查

变量作用说明
GOPROXY模块下载来源逗号分隔,direct 为直连
GOPRIVATE私有模块范围同时设定 GONOPROXY 与 GONOSUMDB 的默认值
GONOPROXY跳过代理的模块仅控制代理行为
GONOSUMDB跳过校验库的模块私有模块无法被公共校验库覆盖
-mod=readonly 防止 CI 因缺失依赖自动改动 go.mod:依赖变更必须显式提交,构建过程保持无副作用。
go.sum 缺条目时构建会失败:本地执行 go mod tidy 更新后随变更一起提交,不要在 CI 里自动补。
CI 缓存 GOMODCACHE(默认位于 GOPATH/pkg/mod)可显著加速下载;注意缓存不等于绕过校验,完整性校验仍会执行。
调试私有分支可用 replace 指令临时替换依赖;合并上线前核对移除,避免构建长期依赖非正式来源。
强离线环境可改用 vendor 目录:依赖随仓库分发,构建完全不访问网络,代价是仓库体积与升级成本。

易错点

  • CI 里依赖走 direct 拉取:网络抖动影响构建,配置稳定代理。
  • 私有仓库未设 GOPRIVATE:请求外发公共代理失败或泄露内部路径,配置排除范围。
  • go.sum 有未提交改动:-mod=readonly 下直接失败,本地 tidy 后随变更提交。
  • 断网环境无代理缓存:构建挂起直至超时,部署自建模块代理或预填充模块缓存。
  • GOPROXY 配成单一源且无 direct 兜底:源站故障时所有构建同时失败,保留兜底源或自建缓存层。

数据来源与参考

  • Go 官方文档《Module proxies》
  • Go Modules Reference
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌