无法将私有Go模块github.com/XXX/lib下载至serviceA/serviceB的问题
解决Go私有仓库模块拉取失败(Repository not found)
问题场景
后端目录结构:
/backend /lib go.mod /serviceA go.mod /serviceB go.mod go.work go.work.sum
尝试将github.com/XXX/lib拉取到serviceA或serviceB时,触发以下错误:
go: module github.com/XXX/lib: git ls-remote -q origin in /Users/XXX/go/pkg/mod/cache/vcs/3d48bbee58603e5a60795e264deda7fec8cd31854e689825028f9ab9f9bbabc2: exit status 128: ERROR: Repository not found. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
已完成的配置:
- 在
.gitconfig中添加:
[url "ssh://git@github.com/"] insteadOf = https://github.com/
- 设置Go私有模块环境变量:
go env -w GOPRIVATE="github.com/XXX/*"
排查与解决步骤
1. 验证SSH密钥有效性
- 执行
ssh -T git@github.com,若返回Hi XXX! You've successfully authenticated, but GitHub does not provide shell access.说明密钥权限正常;否则重新生成SSH密钥并添加到GitHub账号。 - 确保密钥文件权限合规:执行
chmod 600 ~/.ssh/id_rsa(ed25519密钥对应id_ed25519),避免权限过宽被SSH服务拒绝。
2. 确认GOPRIVATE配置生效
- 执行
go env GOPRIVATE,检查输出是否包含github.com/XXX/*。 - 若未生效,排查是否有环境变量文件(如
~/.bashrc、~/.zshrc)覆盖了该配置。可临时在终端执行export GOPRIVATE=github.com/XXX/*,再尝试拉取模块。
3. 核对模块路径与仓库信息
- 确认
github.com/XXX/lib的路径完全匹配仓库实际地址,注意GitHub路径区分大小写。 - 检查serviceA/serviceB的
go.mod中引用的模块版本是否存在:- 若使用分支,需指定分支名:
go get github.com/XXX/lib@main - 若使用tag,确保tag已推送到远程:
go get github.com/XXX/lib@v1.0.0 - 若使用commit,替换为实际哈希值:
go get github.com/XXX/lib@abcdef123456
- 若使用分支,需指定分支名:
4. 清理Go模块缓存
执行go clean -modcache清除本地模块缓存,之后重新执行拉取命令,避免缓存的错误状态干扰。
5. 排查go.work的影响
- 查看
go.work文件,若包含use ./lib声明,Go会优先使用本地lib模块,无需拉取远程版本。若需拉取远程版本,可临时注释该声明,完成后再恢复。 - 也可直接进入serviceA/serviceB目录单独执行
go get,规避workspace的影响。
内容的提问来源于stack exchange,提问作者user2738145
相关产品推荐
相关产品推荐

