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:downloadingcode.lazycorp.com/privaterepov0.0.0-20200408100711-ed766a2975cegogetcode.lazycorp.com/privaterepo:code.lazycorp.com/privaterepo@v0.0.0-20200408100711-ed766a2975ce:verifyingmodule:code.lazycorp.com/privaterepo@v0.0.0-20200408100711-ed766a2975ce:readinghttps://sum.golang.org/lookup/code.lazycorp.com/privaterepo@v0.0.0-20200408100711-ed766a2975ce:410Goneserverresponse:notfound:code.lazycorp.com/privaterepo@v0.0.0-20200408100711-ed766a2975ab:invalidversion:gitfetch-foriginrefs/heads/*:refs/heads/*refs/tags/*:refs/tags/*in/tmp/gopath/pkg/mod/cache/vcs/13e63a509893edc19353a80fa2c6e28db213d146f72fe43ba65c1ec86624027b:exitstatus128:fatal:couldnotreadUsernamefor'https://code.lazycorp.com':terminalpromptsdisabled
导致这个问题的原因是Go Moduels 模式通过 HTTPs 的方式下载 git仓库上的代码,我们希望(而不是使用 HTTPS)通过 SSH 下载这些私有依,这样我们就可以使用本地设置的 SSH 密钥来访问git 仓库。
为解决这个问题我们可以做的是配置 git 以将所有 HTTPs URL 重写为等效的 git SSH URL:
gitconfig--add--globalurl."git@code.lazycorp.com:".insteadOfhttps://code.lazycorp.com
code.lazycorp.com
是我随便起的名字,这里应该替换成你们公司的git仓库的域名,如果是使用GitHub上的私有仓库就配置:
gitconfig--add--globalurl."git@github.com:".insteadOfhttps://github.com
配置GOPRIVATE环境变量
这个环境变量就是为私有依赖准备的,一般是设置成代码仓库站点的域名。还是假如公司内部代码仓库站点的域名是code.lazycorp.com
,那么我们就把这个环境变量设置成
exportGOPRIVATE=code.lazycorp.com
这样设置的话,所有路径前缀为code.lazycorp.com
的模块都不会再经过GOPROXY
指定的镜像站点拉取模块对应的软件包,转而去code.lazycorp.com
拉取软件包。
这里提一个小技巧,假如你自己开发的时候不想污染电脑系统里的全局环境变量,可以选择在GoLand
里开启Go Modules支持和设置环境变量,这样在GoLand
内编译运行程序时也能正常使用Go Modules。
总结
经过上面两步配置就能顺利让Go Modules使用上私有依赖,如果还有Go Modules使用上的问题,欢迎各位留言讨论,相信读者里隐藏着不少大佬能一起解决这些问题。
今天的文章就到这里啦,如果喜欢我的文章就帮我点个赞吧,我会每周通过技术文章分享我的所学所见和第一手实践经验,感谢你的支持。微信搜索关注公众号--网管叨bi叨每周教会你一个进阶知识。
作者:kevinyan著作权归作者所有。