go mod download卡在proxy.golang.org是因为国内直连不稳定,必须设goproxy=https://goproxy.cn,direct并配goprivate处理私有模块,否则会超时、404或校验失败。

go mod download卡在proxy.golang.org怎么办
这不是你网络差,是默认代理根本连不上——proxy.golang.org在国内多数地区会触发dial tcp: i/o timeout或DNS污染,表现就是命令卡住几秒后失败。别试ping或curl,Go工具链根本不走系统DNS缓存,它自己建TLS连接,失败就重试退避。
真正有效的解法只有一条:go env -w GOPROXY=https://goproxy.cn,direct。注意逗号后必须跟direct,缺了它,私有模块(比如git.internal.company.com/lib)就会404或checksum mismatch。
-
goproxy.cn目前最稳:七牛云维护,节点覆盖广,对Go 1.21+和校验和透传兼容性好 - 别用
https://goproxy.io:该站已停服,2026年实测返回502或空白响应 - 阿里镜像
https://mirrors.aliyun.com/goproxy/末尾必须带斜杠,否则404
go env -w GOPROXY设了但没生效的常见原因
很多人执行完go env -w GOPROXY=...,一跑go mod download还是连proxy.golang.org。问题不在命令本身,而在子进程没读到值。
验证是否真生效,不能只看go env GOPROXY输出,要跑调试命令:go mod download -x github.com/gin-gonic/gin@v1.9.1,然后盯日志里出现的是GET https://goproxy.cn/...还是GET https://proxy.golang.org/...。
- Shell终端没重载:Linux/macOS需
source ~/.bashrc或source ~/.zshrc;Windows PowerShell要重启终端 - IDE(如VS Code)不继承Shell环境变量:必须在编辑器设置里单独填
GOPROXY,不能依赖终端配置 - CI/CD流水线里没显式导出:YAML中要写
env: GOPROXY: "https://goproxy.cn,direct",不能只靠go env -w
私有模块拉取失败或checksum mismatch怎么修
报not found或verifying github.com/xxx@v1.2.3: checksum mismatch,大概率不是网速问题,而是代理策略没配全。
direct只是兜底动作,Go还得知道“哪些模块该跳过代理”。这靠GOPRIVATE控制,不是可选项。
- 先设
go env -w GOPRIVATE=git.internal.company.com,github.com/my-org(逗号分隔,不能用通配符) - 如果用了
GONOPROXY或GONOSUMDB,它们的值必须和GOPRIVATE完全一致,否则校验阶段直接拒绝 - 遇到
checksum mismatch,先跑go clean -modcache清本地缓存,再重试;临时调试可go env -w GOSUMDB=off,但上线前必须关掉
刚发布的版本在goproxy.cn返回404
不是镜像同步慢,是CDN缓存未刷新。新tag(比如v1.2.3)发布后1–2分钟内,goproxy.cn可能还没入库。
此时别换源、别重试,等两分钟再跑go mod download。如果实在等不了,临时切到https://proxy.golang.com.cn(官方中国代理),但注意它偶尔短暂不可用。
真正容易被忽略的点是:GOPROXY配置里漏掉,direct、GOPRIVATE没覆盖全部私有域名、IDE或CI环境变量没同步——这三个点只要错一个,Go就会静默 fallback 回proxy.golang.org,前面所有配置等于白做。











