根本原因是go默认串行解析依赖树且直连不稳定的proxy.golang.org;解决方法是设置goproxy=https://goproxy.cn,direct并用go mod download -j 8提升并发,配合goprivate和gosumdb配置确保私有模块与校验兼容。

为什么 go mod download 慢得像在等编译完成?
根本原因不是网络带宽,而是 Go 默认用 proxy.golang.org(国内直连不稳定),且不并发下载所有模块——它会串行解析依赖树、逐个 fetch,遇到超时就重试,卡在某个私有模块或被墙的域名上就全链路阻塞。
换代理 + 并发控制:两步见效
不用改代码,只改环境变量和命令参数:
- 设置国内可信代理:
export GOPROXY=https://goproxy.cn,direct(direct保底,对私有仓库仍走直连) - 强制并发下载:
go mod download -x查看实际 fetch 过程;更关键的是加-j 8(Go 1.21+ 支持):go mod download -j 8,把默认的 4 线程提到 8 - 若项目含大量私有模块(如
git.example.com/internal/lib),在go.mod顶部加replace或用GOPRIVATE=*.example.com避免代理误转发
go env -w 写死配置,别靠临时 export
每次开新终端都要 export 很容易漏,而且 CI/CD 环境里常失效。直接持久化:
go env -w GOPROXY=https://goproxy.cn,directgo env -w GOPRIVATE=git.mycompany.com,github.com/myorg/private-
go env -w GOSUMDB=off(仅开发阶段;若需校验,改用sum.golang.org或自建 sumdb)
注意:GOSUMDB=off 会跳过 checksum 校验,适合内网离线环境;公网项目建议保留校验,仅调大超时:go env -w GOSUMDB=sum.golang.org + 在 ~/.netrc 配 auth(如有)
私有模块卡住?检查 git 协议和凭证
代理只管 HTTP(S) 请求,git:// 或 SSH 地址(如 git@github.com:user/repo.git)仍走本地 git clone,这时慢是 git 层问题:
- 把 SSH 改成 HTTPS:
replace github.com/user/repo => https://github.com/user/repo v1.2.3 - 确保
~/.gitconfig有[url "https://"] insteadOf = git:// - SSH 私钥没加载?
eval $(ssh-agent)+ssh-add ~/.ssh/id_rsa(CI 中需提前注入)
真正卡住的时候,go mod download -x 输出里会出现 git clone 命令卡在 “Resolving deltas…” 或超时,那就不是 Go 的问题了。











