go mod download 卡在 proxy.golang.org 是因官方代理对国内节点未优化,易受 DNS 污染、TLS 超时等影响;应设 GOPROXY=https://goproxy.cn,direct,并配 GOPRIVATE 和 GOSUMDB 避免静默回退。

为什么 go mod download 总是卡在 proxy.golang.org
因为默认的官方代理 proxy.golang.org 在国内直连不稳定,DNS 污染、TLS 握手超时、连接重置都很常见。不是你网络差,是它本身对国内节点没做优化。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 优先切换成国内可信镜像,比如
https://goproxy.cn(阿里云)或https://mirrors.aliyun.com/goproxy/(同源但路径更规范) - 避免用
https://goproxy.io—— 已停服,部分旧教程还在提,实际会 502 - 设置方式统一用环境变量:
export GOPROXY=https://goproxy.cn,direct(注意,direct不可少,否则私有模块无法拉取)
GOPROXY 设置后 go build 还报 checksum mismatch
这不是网速问题,是校验失败:模块内容和 sum.golang.org 记录的哈希不一致。常见于镜像源同步延迟、中间代理篡改或本地缓存污染。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 先清缓存:
go clean -modcache,再重试 - 确认镜像源是否支持 checksum 校验 ——
goproxy.cn和mirrors.aliyun.com/goproxy都透传官方 sum,但某些自建 proxy 若没配GOINSECURE或跳过校验,就会出问题 - 临时绕过校验(仅调试):
export GOSUMDB=off,但上线前必须关掉,否则失去依赖完整性保护
公司内网怎么安全用模块代理又不暴露私有仓库地址
直接写死 GOPROXY 为单一地址,私有模块就拉不到;全设 direct 又丢掉加速效果。核心是分层代理策略。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 用逗号分隔多个代理:
export GOPROXY=https://goproxy.cn,https://private-proxy.example.com,direct - 确保私有代理服务(如 Nexus、JFrog)已正确配置 Go 能力,并返回标准
mod/zip接口 - 私有模块路径需匹配
GOPRIVATE,例如:export GOPRIVATE=git.example.com/internal/*,否则 go 仍会尝试走公共 proxy 去查
为什么加了 GOPROXY 后 go list -m all 变慢了
因为 go list 默认会检查每个模块的最新版本(哪怕你只想要当前版本),而代理响应延迟会被放大。尤其当 go.sum 里混着几十个不同来源的模块时,逐个请求就明显卡顿。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 日常开发不用频繁跑
go list -m all,改用go list -m -f '{{.Path}} {{.Version}}' all减少字段解析开销 - CI 环境可提前缓存:
go mod download再执行构建,避免边 build 边下载 - 如果只是查某个模块,直接
go list -m github.com/sirupsen/logrus,比全量快一个数量级
真正麻烦的不是换镜像,而是混合使用时 GOPRIVATE、GOSUMDB、GOPROXY 三者边界没对齐 —— 少设一个,就可能触发静默 fallback 到官方源,然后卡住、报错、或者下到错误版本。










