go proxy 在 go env 和环境变量中设置生效,影响所有 go 命令;优先级为命令行 > 环境变量 > go env -w 持久配置;必须用逗号分隔并以 direct 结尾兜底。

Go proxy 设置在哪生效
Go 的代理配置只在 go env 级别和环境变量层面起作用,不写进 go.mod 或项目文件。它影响所有 go get、go mod download、go build(当涉及未缓存模块时)等命令。
- 优先级:命令行
-mod=mod+GO_PROXY环境变量 >go env -w GOPROXY=...持久设置 > 默认值https://proxy.golang.org,direct - 必须用逗号分隔多个代理,末尾加
direct作为兜底(否则私有模块或断网时直接失败) - Windows 用户注意:PowerShell 中设置需用
$env:GOPROXY="https://goproxy.cn,direct",CMD 则用set GOPROXY=https://goproxy.cn,direct - VS Code 的终端可能不继承系统环境变量,建议统一用
go env -w GOPROXY=...避免 IDE 内下载失败
国内常用 Go proxy 地址及稳定性差异
不是所有标“国内镜像”的地址都可靠——部分已停更、证书过期或仅支持 HTTP(Go 1.21+ 默认拒绝非 HTTPS 代理)。
-
https://goproxy.cn:由七牛云维护,响应快、兼容性好,支持go list -m -json all类元数据请求 -
https://mirrors.aliyun.com/goproxy/:阿里云官方镜像,但偶尔同步延迟(尤其新发布模块的.info文件滞后数分钟) -
https://proxy.golang.google.cn:Google 官方中国节点,需科学上网环境才能访问,实际在国内多数网络下不可达 - 避免使用
http://goproxy.io或旧版https://goproxy.io:后者已下线,访问会返回 404 或重定向到商业页面
GO_PROXY 设置后仍超时或 403 的真实原因
代理设对了,但 go get 还是卡住或报错,大概率不是地址问题,而是网络策略或模块路径细节没对上。
- 公司内网常拦截
sum.golang.org——Go 1.13+ 强制校验模块 checksum,需同时配GOINSECURE(如GOINSECURE="*.example.com")或GOSUMDB=off(仅开发环境) - 私有 Git 仓库模块(如
git.example.com/my/lib)不会走 GOPROXY,除非显式加前缀replace git.example.com/my/lib => ./local或用git.example.com加入GOINSECURE - 某些代理(如早期
goproxy.cn)不支持带+incompatible后缀的版本请求,遇到v1.2.3+incompatible报 404 时,可临时改用goproxy.io(若可用)或降级到v1.2.3
CI/CD 中如何安全复用 Go proxy 配置
GitHub Actions、GitLab CI 等环境默认无持久 go env,每次 job 都是干净环境,硬编码 proxy 容易漏或写错。
立即学习“go语言免费学习笔记(深入)”;
- 推荐在 CI 脚本开头统一执行:
go env -w GOPROXY=https://goproxy.cn,direct GOSUMDB=sum.golang.org - 不要在
.gitlab-ci.yml里用variables:直接写GOPROXY——GitLab CI 的变量注入顺序可能导致go命令启动时未生效 - 如果使用自建 Nexus 或 Artifactory 做 Go 代理,务必确认其支持
/@v/v1.2.3.info和/@v/v1.2.3.mod这类 Go Module 发现协议路径,否则go mod tidy会静默失败
代理地址本身很简单,真正卡住人的永远是 checksum 校验、私有域名处理、CI 环境变量加载时机这些隐性链路。调不通时先 go env | grep GOPROXY 看实际生效值,再 curl -v https://goproxy.cn/github.com/gorilla/mux/@v/v1.4.0.info 手动测通路,比反复换地址更省时间。










