GOPROXY 配置后 go get 失败主因是环境变量未生效或值不合法;需确保 GOPROXY 非空、格式正确(如 https://goproxy.cn,direct),优先用 go env -w 持久设置,并配合 GOPRIVATE 控制私有模块代理行为。

为什么 GOPROXY 配置后 go get 仍失败?
多数问题不是代理没设,而是环境变量未生效或值不合法。Go 1.13+ 默认启用代理,但若 GOPROXY 设为空字符串("")或 off,会跳过代理直连;设为非法 URL(如少 https://)则报 invalid proxy URL 错误。
- 检查是否被 shell 配置覆盖:
echo $GOPROXY确认输出非空且格式正确(如https://goproxy.cn,direct) - Windows 用户注意:PowerShell 中用
$env:GOPROXY="https://goproxy.cn,direct",CMD 中用set GOPROXY=https://goproxy.cn,direct - 若公司网络拦截第三方代理,可改用
https://proxy.golang.org或自建athens实例
go env -w 和 shell export 哪种方式更可靠?
go env -w 写入的是 Go 的用户级配置文件(~/.go/env),优先级高于 shell 环境变量,且跨终端持久生效;而 export GOPROXY=... 只在当前 shell 会话有效,重启终端即失效。
- 推荐命令:
go env -w GOPROXY=https://goproxy.cn,direct
- 若需临时绕过代理调试,用
GO111MODULE=on GOPROXY=off go get example.com/pkg,避免污染全局设置 -
direct是必须的 fallback:当代理返回 404 或 503 时,Go 会自动回退到直接拉取模块源码
国内常用代理地址及 fallback 顺序怎么写?
单个代理挂掉会导致整个构建中断,所以必须用逗号分隔多个代理,并以 direct 收尾。国内最稳组合是 goproxy.cn 主力 + proxy.golang.org 备用。
免费 盛世企业网站管理系统(SnSee)系统完全免费使用,无任何功能模块使用限制,在使用过程中如遇到相关问题可以去官方论坛参与讨论。开源 系统Web代码完全开源,在您使用过程中可以根据自已实际情况加以调整或修改,完全可以满足您的需求。强大且灵活 独创的多语言功能,可以直接在后台自由设定语言版本,其语言版本不限数量,可根据自已需要进行任意设置;系统各模块可在后台自由设置及开启;强大且适用的后台管理支
- 推荐配置:
go env -w GOPROXY="https://goproxy.cn,https://proxy.golang.org,direct"
- 不要省略
https://—— Go 不接受裸域名(goproxy.cn会被解析失败) - 避免使用已停服的旧代理(如
https://mirrors.aliyun.com/goproxy/),部分镜像站已关闭或仅限内网
私有模块(如 GitLab)如何不走代理?
Go 不支持 per-domain 代理开关,但可通过 GOPRIVATE 环境变量声明哪些模块跳过代理和校验。匹配规则支持通配符,例如 gitlab.example.com/*。
立即学习“go语言免费学习笔记(深入)”;
- 设置方式:
go env -w GOPRIVATE=gitlab.example.com/*,github.company.com/*
- 若私有模块启用了 Go module proxy 协议(如自建 Athens),仍需在
GOPROXY中显式加入该地址,否则GOPRIVATE仅禁用代理和 checksum 校验 - 注意:一旦设了
GOPRIVATE,对应模块的go.sum将不再记录 checksum,CI 流程中需额外校验来源可信度
GOPROXY 和 GOPRIVATE 必须协同设置,缺一不可。









