Go Modules 下载慢的根本原因是默认直连境外源导致DNS污染、超时及TLS失败;解决方法是设置GOPROXY为国内代理如https://goproxy.cn,direct,并用go env -w写入全局配置。

为什么 Go Modules 下载慢
根本原因不是 Go 本身,而是 go mod download 默认直连 GitHub、Google 等境外源,国内网络环境下 DNS 污染、连接超时、TLS 握手失败频发。常见现象包括:Get "https://proxy.golang.org/...": dial tcp: i/o timeout 或卡在 verifying github.com/xxx@v1.2.3 不动。
设置 GOPROXY 环境变量(最直接有效)
Go 1.13+ 默认启用代理机制,只需指定稳定、国内可访问的代理地址。优先级从高到低生效,建议用带 fallback 的组合:
-
export GOPROXY=https://goproxy.cn,direct(推荐,清华镜像已停更,goproxy.cn 更活跃) -
export GOPROXY=https://goproxy.io,direct(备选,偶有同步延迟) - 若项目含私有模块,必须保留
direct在末尾,否则无法拉取未公开仓库 - Windows 用户用 PowerShell:
$env:GOPROXY="https://goproxy.cn,direct"
go env -w 写入全局配置(避免每次重设)
比 shell 环境变量更可靠,尤其对 IDE(如 VS Code)或 CI 环境生效:
- 运行
go env -w GOPROXY=https://goproxy.cn,direct - 验证是否写入:
go env GOPROXY应输出对应值 - 若误设,用
go env -u GOPROXY清除 - 注意:该命令修改的是用户级
go.env文件,不影响系统级配置
临时绕过代理只拉某个模块
当某私有库或内部 GitLab 项目无法走代理时,不能全局关掉 GOPROXY,而应局部跳过:
- 用
replace在go.mod中硬链接本地路径:replace example.com/internal => ../internal - 或用
exclude+replace组合处理冲突版本 - 绝对不要设
GOPROXY=direct全局关闭——这会让所有依赖回归原始慢速直连 - 某些企业 Git 服务需额外配
GOINSECURE=git.example.com才能跳过 TLS 校验
sum.golang.org 被墙后,Go 会反复重试,此时 direct fallback 就成了关键保险。










