怎么让Go Modules使用私有依赖模块

Go语言官方的依赖包管理工具Go Modules已经发布很久,从1.14版本开始更是默认自动开启了Go Modules的支持,相信很多人公司里的项目都从go vendor、dep 之类的依赖管理切换到Go Modules上了吧。

Go Modules 号称是语言原生的、零配置开箱即用的包依赖管理工具,当然零配置只有我们项目依赖的都是相互之间没有冲突的外部公共包时这个条件才能成立。

我在之前的文章《项目改用GoModules管理依赖的方法和经验总结》里给大家总结了项目切换到Go Modules进行包依赖管理的一些步骤,也介绍了怎么用 replace 指令解决 etcd 和 grpc 的版本不兼容这个比较令人费解的问题的方法。

不过我发现一些朋友在第一次切换到Go Modules的时候在怎么让Go Modules使用私有代码仓库的包作为依赖模块时都会遇到些问题。这篇文章帮大家总结一下让Go Modules使用私有代码仓库做模块时,两个需要配置的地方。

配置Git使用SSH拉取私有依赖

如果不做任何设置,当我们的项目通过Go Modules 引用私有仓库的代码包时会发生以下错误:

go: downloading code.lazycorp.com/privaterepo v0.0.0-20200408100711-ed766a2975ce
go get code.lazycorp.com/privaterepo: code.lazycorp.com/privaterepo@v0.0.0-20200408100711-ed766a2975ce: verifying module: code.lazycorp.com/privaterepo@v0.0.0-20200408100711-ed766a2975ce: reading https://sum.golang.org/lookup/code.lazycorp.com/privaterepo@v0.0.0-20200408100711-ed766a2975ce: 410 Gone
        server response:
        not found: code.lazycorp.com/privaterepo@v0.0.0-20200408100711-ed766a2975ab: invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /tmp/gopath/pkg/mod/cache/vcs/13e63a509893edc19353a80fa2c6e28db213d146f72fe43ba65c1ec86624027b: exit status 128:
                fatal: could not read Username for 'https://code.lazycorp.com': terminal prompts disabled

导致这个问题的原因是Go Moduels 默认通过 HTTPs 的方式下载 git 仓库上的代码,我们希望(而不是使用 HTTPS)通过 SSH 下载这些私有依赖,这样我们就可以使用本地设置的 SSH 密钥来访问git 仓库。

为解决这个问题我们可以做的是配置 git 将所有 HTTPs URL 重写为等效的 git SSH URL:

git config --add --global url."git@code.lazycorp.com:".insteadOf https://code.lazycorp.com

code.lazycorp.com是我随便起的名字,这里应该替换成你们公司的git仓库的域名,如果是使用GitHub上的私有仓库就配置:

git config --add --global url."git@github.com:".insteadOf https://github.com

配置GOPRIVATE环境变量

这个环境变量就是为私有依赖准备的,一般是设置成代码仓库站点的域名。还是假如公司内部代码仓库站点的域名是code.lazycorp.com,那么我们就把这个环境变量设置成

export GOPRIVATE=code.lazycorp.com

这样设置的话,所有路径前缀为code.lazycorp.com的模块都不会再经过GOPROXY指定的镜像站点拉取模块对应的软件包,转而去code.lazycorp.com拉取软件包。

这里提一个小技巧,假如你自己开发的时候不想污染电脑系统里的全局环境变量,可以选择在GoLand里开启Go Modules支持和设置环境变量,这样在GoLand内编译运行程序时也能正常使用Go Modules。

Goland配置

总结

经过上面两步配置就能顺利让Go Modules使用上私有依赖了。

相关阅读

项目改用GoModules管理依赖的方法和经验总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值