GOPROXY 在国内不配置将导致 go mod 无法正常使用;Go 1.13+ 默认代理 https://proxy.golang.org 国内不可达,推荐设为 https://goproxy.cn,direct 并验证生效。

GOPROXY 不是必须配置的,但**在国内环境下不配就几乎无法正常使用 go mod**。
Go 1.13+ 默认启用模块模式,所有依赖拉取都走 go proxy 协议。默认值是 GOPROXY=https://proxy.golang.org,direct,而 https://proxy.golang.org 在国内基本不可达——表现为 go get 卡住、超时,或报错如:
go: github.com/some/pkg@v1.2.3: Get "https://proxy.golang.org/github.com/some/pkg/@v/v1.2.3.info": dial tcp 142.250.185.110:443: i/o timeout这类错误不是你网络坏了,而是代理地址本身不通。
哪些情况可以跳过 GOPROXY 配置?
仅限以下极少数场景:
为什么推荐用 https://goproxy.cn 而不是其他镜像?
它由七牛云维护,稳定、同步及时、支持 HTTPS 和私有仓库白名单,且对 direct 回源逻辑兼容良好。相比已停更的 goproxy.io 或响应慢的自建代理,它是目前最省心的选择。
- 设置命令:
go env -w GOPROXY=https://goproxy.cn,direct -
direct是关键:遇到GOPRIVATE中声明的域名(如git.company.com),会跳过代理直连,避免私有库泄露 - 若需排除多个私有域,加:
go env -w GOPRIVATE=git.internal.com,github.com/my-org/private
配置后仍失败?先检查这三件事
常见“配了还是不行”往往卡在细节:
-
go env GOPROXY输出是否真变成https://goproxy.cn,direct?别漏掉direct - 终端是否重载了 shell 配置?改完
~/.zshrc或~/.bash_profile后要source或新开终端 - 是否误用了已弃用的
go get xxx?Go 1.21+ 推荐用go install xxx@latest安装工具,且同样走GOPROXY
GOPROXY 就像没开梯子想上外网——不是语法问题,是基础设施层被堵死了。真正容易被忽略的,是配完不验证、不重启终端、还混用旧命令。










