Go模块下载失败本质是GOPROXY配置不当导致TCP RST,应设为https://goproxy.cn,direct或https://mirrors.aliyun.com/goproxy/,direct,direct必须末尾;私有模块需配合GOINSECURE和GOSUMDB=off,调试可用curl或GODEBUG=httptrace=1定位卡点。

Go模块下载失败常因网络重置,本质是go proxy或GOPROXY配置不当
Go 1.13+ 默认启用 GOPROXY,但国内直连 proxy.golang.org 极易触发 TCP RST(连接被重置),表现为 Get "https://proxy.golang.org/...": read tcp x.x.x.x:port->216.58.200.49:443: read: connection reset by peer。这不是 Go 安装问题,而是代理链路不稳定。
- 优先使用国内可信代理:设置
GOPROXY=https://goproxy.cn,direct或GOPROXY=https://mirrors.aliyun.com/goproxy/,direct - 避免混用多个代理地址——Go 会按顺序尝试,中间任一失败都可能引发重置;
direct必须放在末尾,否则私有模块无法拉取 - 若公司内网禁用 HTTPS 代理,可临时设为
GOPROXY=off,但需确保GOINSECURE和GOSUMDB=off配合,否则校验失败
CDN源选型要匹配 Go 工具链实际请求路径
Go 的 go mod download 和 go get 实际访问的是模块索引 + 源码归档两个路径,不是普通静态资源。很多“高速 CDN”对 /@v/ 和 /@latest 这类路径缓存不友好,反而拖慢速度。
- 阿里云镜像(
https://mirrors.aliyun.com/goproxy/)对 Go 模块协议深度适配,支持Range请求、HTTP/2 和 ETag 缓存,实测比直连快 3–5 倍 - goproxy.cn 节点覆盖广,但部分省份运营商 DNS 解析慢,建议搭配
export GOSUMDB=sum.golang.org(不走代理)避免校验卡顿 - 慎用 Cloudflare 类通用 CDN 作 Go proxy 中转——它默认不缓存带 query 参数的
@v/list接口,每次请求都回源,反而放大延迟
本地调试时绕过 CDN 代理更可控
CI/CD 或本地开发遇到模块拉取失败,不要盲目换 CDN 源,先确认是否真由网络引起。
- 用
curl -v https://goproxy.cn/github.com/golang/freetype/@v/v0.0.0-20190719093024-2751e4a84c2f.info直接测试代理响应,看是否返回 200 + 正确 JSON - 开启 Go 调试日志:
GODEBUG=httptrace=1 go get -v github.com/golang/freetype,观察哪一步卡在 DNS、TLS 握手还是读响应体 - 若仅特定模块失败(如私有 GitLab 仓库),问题大概率出在
git协议而非 CDN——此时应检查~/.gitconfig中的insteadOf规则是否生效
api.github.com 访问正常,但 codeload.github.com 被干扰,就会导致 @v/xxx.zip 下载中断——这种场景换任何 CDN 源都无效,必须走 SSH 或企业级代码镜像。


















