私有Go模块下载失败主因是GOPRIVATE未配置或范围错误;必须设为github.com/yourorg/等精确路径前缀(支持通配),而非仅域名,并同步配置GONOPROXY和GONOSUMDB保持一致。

私有Go模块依赖下载失败,90%是因为没配 GOPRIVATE 或配错了范围 —— 其他代理、SSH、环境变量全调通了,它照样报 module github.com/yourorg/private-repo: reading https://proxy.golang.org/...: 403 Forbidden。
为什么 go get 总卡在 403 或 “unknown revision”
Go 默认把所有模块都当公共模块处理:先走 GOPROXY(比如 https://goproxy.cn),代理查不到就 fallback 到 direct —— 但 direct 不会自动带认证凭据去拉私有仓库。结果就是:要么被代理拒绝(403),要么 Git 拉取时没权限(unknown revision 或 permission denied)。
- 错误典型表现:
go: github.com/yourorg/private-repo@v0.1.0: reading https://proxy.golang.org/...: 403 Forbidden - 不是网络问题,也不是 Git 配置没生效,而是 Go 根本没让 Git 走进去
- 关键判断点:看错误里有没有
proxy.golang.org或goproxy.cn—— 有,说明还在走代理;没出现,才轮到 Git 认证环节
GOPRIVATE 必须设对,不能只填域名
GOPRIVATE 告诉 Go:“这些路径下的模块,别走代理,直接用 Git 拉”。但它匹配的是模块路径前缀,不是域名,且**不支持通配符展开**。
- 正确写法:
go env -w GOPRIVATE=github.com/yourorg/*(斜杠后加*才能匹配子路径) - 错误写法:
GOPRIVATE=github.com→ 只匹配github.com这个字面量,不匹配任何子路径 - 多个域名用逗号分隔:
go env -w GOPRIVATE=gitlab.example.com,github.com/yourorg/* - 如果用了子域名(如
private.github.yourcompany.com),必须完整写出:go env -w GOPRIVATE=private.github.yourcompany.com/*
Git 认证方式选 SSH 还是 HTTPS?看你的 CI/CD
设完 GOPRIVATE 后,Go 会调用 git 命令拉代码。这时得确保 git 本身能认证成功。
- SSH 更稳:
git@github.com:yourorg/private-repo.git→ 依赖本地~/.ssh/id_rsa和ssh-agent,适合开发机和 GitHub Actions(需配置 deploy key) - HTTPS + token 更灵活:
https://<token>@github.com/yourorg/private-repo.git</token>→ 适合 GitLab CI、自建 Runner,token 放~/.netrc或环境变量GIT_AUTH_TOKEN - 验证是否生效:
git ls-remote git@github.com:yourorg/private-repo.git或git ls-remote https://<token>@github.com/yourorg/private-repo.git</token>,能列出 ref 就行 - CI 场景注意:
GOPRIVATE必须在构建环境里也设置,不能只在本地设
别漏掉 GONOPROXY 和 GONOSUMDB
GOPRIVATE 只控制“是否走代理”,但校验和数据库(GOSUMDB)默认仍会尝试校验私有模块 —— 它查不到,就会报错。
- 同步关闭校验:
go env -w GONOPROXY=github.com/yourorg/*(与GOPRIVATE值一致) - 同步跳过 checksum:
go env -w GONOSUMDB=github.com/yourorg/* - 三者必须一致:
GOPRIVATE、GONOPROXY、GONOSUMDB的值应完全相同,否则行为不可预测 - 验证命令:
go env | grep -E "(GOPRIVATE|GONOPROXY|GONOSUMDB)"
最常被忽略的其实是 GOPRIVATE 的路径匹配规则 —— 写成 github.com/yourorg 看似合理,但 Go 不认,必须加 /*。配错这一条,后面所有 SSH、token、代理配置都白搭。

















