必须显式设置go111module=on、goproxy=https://goproxy.cn,direct、gosumdb=off(开发)或sum.golang.org+signingkey(生产),以确保依赖下载成功、版本锁定可靠、构建可复现。

GO111MODULE=on 必须显式启用
Go 1.11 引入 modules 后,GO111MODULE 默认行为在不同 Go 版本和项目路径下不一致:在 $GOPATH 内可能自动关闭,外部路径又可能默认开启。这导致本地能跑、CI 构建失败,或依赖版本突然回退。
解决方法很简单,但必须主动设置:
- 运行
go env -w GO111MODULE=on(永久生效) - 确认生效:执行
go env GO111MODULE应输出on - 避免在脚本中用
export GO111MODULE=auto——auto已被弃用且行为模糊
GOPROXY 推荐设为国内镜像 + direct 回退
不设 GOPROXY 时,go get 会直连 GitHub 和 proxy.golang.org,国内用户常遇到超时、403 或模块 checksum 错误。
推荐配置兼顾速度与可靠性:
- 运行
go env -w GOPROXY=https://goproxy.cn,direct -
direct表示当代理返回 404 时,直接从源仓库拉取(避免私有模块无法命中) - 不要只设
https://goproxy.cn—— 缺少direct会导致私有模块或未收录模块拉取失败 - 若企业内网有 Nexus 或 Artifactory,可替换为内部地址,仍保留
,direct
GOSUMDB=off 或换为 sum.golang.org+signingkey
默认 GOSUMDB=sum.golang.org 会校验模块 checksum,但该服务在国内不稳定,容易卡在 verifying github.com/xxx@v1.2.3 步骤,且无法跳过。
两种稳妥做法:
- 开发阶段临时禁用:
go env -w GOSUMDB=off(注意:仅限可信环境) - 生产或团队协作建议切换为带签名验证的国内镜像:
go env -w GOSUMDB=sum.golang.org+signingkey:torvalds@google.com:8ce7e525963a1b00f5d3c254592581b0a190e04958494b644307304905429823 - 切勿长期用
GOSUMDB=off上 CI/CD —— 它绕过所有完整性校验,存在供应链风险
这三个变量看似只是环境配置,但实际影响模块下载是否成功、依赖是否锁定、构建是否可复现。尤其 GOPROXY 和 GOSUMDB 的组合行为,在私有模块和离线 CI 场景下极易暴露问题,等报错再查往往已拖慢整个流程。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











