goproxy不生效主因是goprivate或gonoproxy优先级更高而拦截请求;需按goprivate→gonoproxy→goproxy顺序排查,确认direct兜底、https可达性、gonoproxy前缀匹配规则及ci/cd环境变量继承。

GOPROXY 不生效?大概率是 GOPRIVATE 或 GONOPROXY 拦截了请求,不是代理地址写错了。
go env -w GOPROXY 是首选配置方式
Go 1.13+ 已弃用 shell 级 export GOPROXY=... 的持久化写法——它在 CI/CD、Docker 构建或新终端中极易失效。正确做法是用 Go 自带命令写入用户级配置:
- 运行
go env -w GOPROXY="https://goproxy.cn,https://proxy.golang.org,direct"(注意:逗号分隔,无空格) -
direct必须保留,它是私有模块或镜像未缓存时的兜底策略,缺了会导致go get直接报错而非回退 - 验证是否生效:执行
go env GOPROXY,别信echo $GOPROXY—— Go 已忽略 shell 环境变量优先级
GOPROXY 失效时先查匹配顺序
Go 判断是否走代理,顺序固定:GOPRIVATE → GONOPROXY → GOPROXY。只要包路径匹配前两者任意一个,就跳过代理。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
-
GOPRIVATE优先级最高,用于标记私有域名(如git.corp.com),匹配即直连,不走任何代理 -
GONOPROXY只支持前缀匹配,不支持通配符:GONOPROXY=git.corp.com有效,GONOPROXY=*.corp.com完全无效 - 多个域名用英文逗号分隔:
go env -w GONOPROXY="git.corp.com,github.internal" - 检查当前全部相关变量:
go env GOPROXY GOPRIVATE GONOPROXY
代理地址无法访问?先手动 curl 测试
常见现象是 go get 卡住 30 秒后报 dial tcp: i/o timeout,这往往不是 Go 配置问题,而是网络层不通。
- 用 curl 模拟请求:
curl -v https://goproxy.cn/github.com/sirupsen/logrus/@v/v1.9.3.info - 若 curl 同样失败,说明代理服务不可达,可换为
https://mirrors.aliyun.com/goproxy/或https://mirrors.tuna.tsinghua.edu.cn/goproxy/ - 内网环境若需自签名证书,仅设
GOPROXY不够,还需配GOSUMDB=off或GOINSECURE=git.corp.com
私有模块拉取失败?关键在版本声明和 GOINSECURE
私有 Git 仓库(如 GitLab)上没打 tag、没暴露 /@v/list 接口,或证书不被信任,都会导致 go mod download 报 no matching versions for query "latest"。
- 强制指定版本触发缓存:
go get git.corp.com/myteam/lib@v0.1.0,比go mod download更可靠 - GitLab 项目需设为
public或internal,且在 Settings > General 中启用 Go Modules 支持 - 若用 HTTPS + 自签名证书,客户端必须加
GOINSECURE=git.corp.com,否则卡在x509: certificate signed by unknown authority
最易被忽略的是 direct 的必要性与 GONOPROXY 的前缀匹配规则——它们不出现在错误信息里,但会静默接管整个模块拉取流程。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










