Go proxy配置必须全用HTTPS协议,HTTP地址会导致静默挂起;多源需逗号分隔且无结尾斜杠;私有模块须配GOPRIVATE,direct不能单独使用。

Go proxy 配置里混用了 HTTP 和 HTTPS 协议地址
本地代理配置写成 http://goproxy.cn 或 http://proxy.golang.org 是最常见的挂起原因——Go 1.13+ 默认要求所有 proxy 地址必须是 HTTPS,否则会静默卡住、不报错、不超时,只在 go mod download 或 go build 时无限等待。
- 检查当前配置:
go env GOPROXY,如果输出含http://开头的地址,立刻修正 - 正确写法只有两种:全 HTTPS(如
https://goproxy.cn),或用逗号分隔多个 HTTPS 地址(如https://goproxy.cn,https://proxy.golang.org) - 若本地有自建 HTTP 代理(比如
http://127.0.0.1:8080),必须加前缀http://并确保 Go 版本 ≥ 1.21 —— 低版本不支持混合协议,且需额外设GOPRIVATE绕过代理
GOPROXY 设置为 direct 但没配好 GOPRIVATE
设 GOPROXY=direct 意味着完全不用代理,但 Go 仍会对非公开模块走默认代理逻辑,尤其当模块路径含公司内网域名(如 git.internal.company.com/repo)时,direct 会导致 DNS 解析失败或连接超时,表现仍是“挂起”而非报错。
-
GOPRIVATE必须显式列出所有私有域名,支持通配符(如git.internal.company.com/*),多个用逗号分隔 - 不能只写
*—— 这会禁用所有代理,包括公共模块,反而让golang.org/x/...等依赖无法下载 - 验证是否生效:运行
go env GOPRIVATE,确认输出包含对应域名;再试go mod download -x,观察日志里是否跳过代理直连
代理地址末尾多了一个斜杠
https://goproxy.cn/ 这种带结尾斜杠的写法,部分 Go 版本(尤其是 1.18–1.20)会触发路径拼接错误,导致请求发到 https://goproxy.cn//sumdb/sum.golang.org/lookup/...(双斜杠),服务端返回 404,客户端却卡住不重试。
- 所有 proxy 地址必须严格无结尾斜杠:
https://goproxy.cn✅,https://goproxy.cn/❌ - 同理检查
GOSUMDB,常见错误是设成sum.golang.org/,应为sum.golang.org - 临时排查可用
curl -I https://goproxy.cn/sumdb/sum.golang.org/lookup/github.com/golang/go@v1.22.0测试地址有效性
Windows 下环境变量被 PowerShell 和 CMD 同时污染
PowerShell 里用 $env:GOPROXY="https://goproxy.cn" 设置后,CMD 窗口仍读取旧值;或者用户在系统级和用户级环境变量里重复设置,优先级混乱,导致实际生效的是一个格式错误的值。
立即学习“go语言免费学习笔记(深入)”;
- 统一用命令行查真实生效值:
go env -w GOPROXY=https://goproxy.cn(写入 Go 自身配置,不受 shell 影响) - 避免混用:
set GOPROXY=...(CMD)、$env:GOPROXY=...(PowerShell)、图形界面“系统属性→环境变量”三处同时设 - 改完后新开终端执行
go env GOPROXY,确认输出与预期完全一致,不含空格、引号、不可见字符


















