Go 1.18下go get卡住、超时或403,主因是GOPROXY未正确配置:必须显式设为国内可用地址(如https://goproxy.cn,direct),并配合GOPRIVATE/GONOPROXY前缀匹配私有模块,同时确保GO111MODULE=on且VS Code等工具透传环境变量。

Go 环境装完后 go get 还卡住、超时、403 或 module lookup failed,基本不是 Go 没装好,而是代理没配对或配错优先级 —— 尤其在国内网络环境下,GOPROXY 必须显式设置,且要搭配 GOPRIVATE 或 GONOPROXY 才能跑通私有模块。
go env GOPROXY 返回空或 proxy.golang.org 就说明代理失效
Go 1.13+ 默认值是 https://proxy.golang.org,direct,但这个地址在国内多数情况不可达。执行 go env GOPROXY,如果输出为空、只有 direct,或仍是默认地址,就属于未生效状态。
- 用
go list -m -u all测试:若卡在某个模块、报Get "https://proxy.golang.org/": dial tcp: i/o timeout,就是代理不通 - 代理地址必须以
https://开头,不支持http:// - 多个代理用英文逗号分隔,Go 按顺序尝试,例如:
https://goproxy.cn,https://mirrors.aliyun.com/goproxy/,direct -
direct是兜底项,必须放在末尾;缺了它,私有模块匹配失败时会直接报错,而不是 fallback 直连
GOPRIVATE 和 GONOPROXY 的匹配规则完全不同
很多人以为 GOPRIVATE=*.company.com 能匹配所有子域名,但 Go 不支持 shell 风格通配符,只认前缀匹配 —— git.internal.company.com 必须写全,company.com 不会自动覆盖其子域。
-
GOPRIVATE优先级最高:只要包路径以列表中任一字符串为前缀,就跳过代理、直连(比如go env -w GOPRIVATE="git.internal.company.com,github.com/my-org") -
GONOPROXY优先级次之,用于更细粒度控制,但同样只做前缀匹配,不支持*或正则 - 两者值建议保持一致;否则
GONOPROXY放行了,GOSUMDB可能因校验失败拒绝拉取 —— 所以也要同步设GONOSUMDB - 多个域名/路径用英文逗号分隔,**不能有空格**,例如:
git.internal.company.com,github.com/my-org
curl 测试代理连通性比看 go env 更可靠
环境变量设对了,不等于代理真能用。国内企业网络常拦截 TLS 或降级 HTTPS,导致 go get 卡在 CONNECT 阶段,30 秒后才报 timeout。
Go 配置库,使用 spf13/viper — 分层优先级(flag > env >file > KV > default),提供 BindPFlag/BindPFlags、SetEnvPrefix + SetEnvKeyReplace 等功能。
立即学习“go语言免费学习笔记(深入)”;
- 手动测代理是否响应:
curl -v https://goproxy.cn/github.com/sirupsen/logrus/@v/v1.9.3.info,应返回 JSON - 如果
curl也失败,换代理试试:https://mirrors.tuna.tsinghua.edu.cn/go/modules/或https://goproxy.cn(七牛云维护,兼容性好) - 某些内网需加 CA 证书,此时仅设
GOPROXY不够,还得配GOSUMDB=off或GOSUMDB=sum.golang.org+ - 临时验证可不改全局:
GOPROXY=https://goproxy.cn go mod download -v,加-v能看到每个模块从哪拉、状态码多少
VS Code 中 gotools 安装失败多数是代理没透传
VS Code 的 Go 扩展(如 gopls、dlv)调用的是系统级 go 命令,但部分 IDE 不自动继承终端的环境变量 —— 尤其是图形界面启动的 VS Code,可能根本没读到你 ~/.zshrc 里的 GOPROXY。
- 在 VS Code 终端里运行
go env GOPROXY,确认值是否和你预期一致;如果不一致,说明 IDE 启动时没加载 shell 配置 - macOS 下可改用命令行启动:
code --new-window,确保继承当前终端环境 - Windows / Linux 用户可在 VS Code 设置里搜
go.gopath和go.toolsEnvVars,手动注入:"go.toolsEnvVars": {"GOPROXY": "https://goproxy.cn,direct"} - 如果仍失败,先在终端里手动运行
go install golang.org/x/tools/gopls@latest,再重启 VS Code
最常被忽略的一点:GOPROXY 生效的前提是模块模式开启(GO111MODULE=on),而某些旧项目或 $GOPATH 下的代码可能默认关闭它 —— 别只盯着代理,先确认 go env GO111MODULE 输出是 on。

















