前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >怎么让Go Modules使用私有依赖模块

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

作者头像
KevinYan
发布2021-09-02 15:19:04
1.6K0
发布2021-09-02 15:19:04
举报
文章被收录于专栏:网管叨bi叨网管叨bi叨

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 引用私有仓库的代码包时会发生以下错误:

代码语言:javascript
复制
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:

代码语言:javascript
复制
git config --add --global url."git@code.lazycorp.com:".insteadOf https://code.lazycorp.com

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

代码语言:javascript
复制
git config --add --global url."git@github.com:".insteadOf https://github.com

配置GOPRIVATE环境变量

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

代码语言:javascript
复制
export GOPRIVATE=code.lazycorp.com

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

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

Goland配置

总结

经过上面两步配置就能顺利让Go Modules使用上私有依赖,如果还有Go Modules使用上的问题,欢迎各位留言讨论,相信读者里一定隐藏着不少大佬能一起解决这些问题。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网管叨bi叨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置Git使用SSH拉取私有依赖
  • 配置GOPRIVATE环境变量
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档