如何在 Go 项目中引入私有仓库
相信无论是哪个公司,在开发项目时都会封装一些 kit 库,或者是 sdk,以提供一些通用的功能接口给其他项目使用。这些 kit 库几乎都不会开源,以私有库的形式存在。在 Go 项目中,引入一个公共开源库很容易,比如这样:
|
|
如果我们想从私有存储库导入 Go 包怎么办?也很简单:确保我们的go mod
可以访问私有 Git 存储库。
GOPRIVATE
与go mod
命令相关的最重要的环境变量有两个,一个是GOPROXY
,另一个是GOPRIVATE
,二者的值都是依赖库的地址(支持正则,多个地址以逗号分隔),二者的区别是:前者是公共依赖的地址,后者是私有依赖的地址。
所以我们要将私有依赖库的地址添加进环境变量:export GOPRIVATE="github.com/xxxx"
私有存储库
在底层,Go 使用 Git 来拉取指定版本的依赖项。因此,我们设备上的 Git 配置必须具有凭据才能访问私有存储库。哪些东西可以作为凭据呢?我们很容易想到:SSH or Token
SSH 凭据
我们在 Terminal 输入下面这个命令,将原本使用 https 协议拉取依赖的方式替换成 ssh 协议。
关于如何给 Git 配置 ssh 请看我的这篇帖子:为M1笔记本搭建后端开发环境,其中提到了 Git 如何通过 ssh 协议拉代码。
|
|
照道理有了 ssh 凭据是可以拉取私有仓库的,但是我遇到了问题(非常诡异):我可以 git clone unnoo(公司私有仓库)的任何依赖项,但是执行go mod download
等 Go 的 Module 相关操作就是出现下面这个报错。
|
|
如果出现了上述情况,基本上都是因为 ssh 公私钥认证出了问题,可以做如下几种方式检查:
- 验证 Github 端是否上传了公钥(公钥位置: github 账户- > settings -> ssh keys)
- 是否配置了 ssh,以及 ssh 是否使用了对应的私钥
- 使用
ssh -T git@github.com
验证账户 - 如果上面都验证过,而问题还是没有解决的话,使用命令配置下私钥
ssh-add -k ~/.ssh/github_id_rsa
经过上面一通检查后,解决了报错,成功使用 go mod 拉取公司的私有 kit 库。
Token
使用 Token 拉取私有仓库分两步走:
- 在 github (https://github.com/settings/tokens) 上创建一个 token, 并授予私有仓库所有访问权限 (Full control of private repositories)
- 使用创建的 token 配置本地 git
|
|