您的位置:晶晶的博客>GoLang>Go1.14及其以上GoMod私有库配置

Go1.14及其以上GoMod私有库配置

gomod

好久不更新博客了,都长草了;被迫营业从头学起Go语言了,特开新文章分类记录go学习成长的点滴,内容可能就没有那么专注了,遇到问题解决了就写啥。

Go mod墙

go官网:http://golang.org/ 

很不巧,golang官网被我大天朝拦在墙外,还好有一个代替地址:https://golang.google.cn/

但是go mod就悲剧了,还好国内有不少热心平台,做开源特别是做免费的开源不容易(开源不等于免费),虽然阿里云、百度、清华都有go mod的代理支持,但是不够完全,特别是引入sumdb机制后就又格格了,找到一个支持的比较完善的开源平台,支持下:https://goproxy.io/zh/

配置:

go env -w GOPROXY="https://goproxy.io,direct"

go env -w GOSUMDB="gosum.io+ce6e7565+AY5qEHUk/qmHc5btzW45JVoENfazw8LielDsaI+lEbq6"

注意-w参数,如果有在环境变量里使用export导入过可能会提示错误,go的环境变量使用go命令本身即可完成,不需要在系统级别使用export机制或profile文件手动写

go mod 私有包

上述go mod代理解决了公开mod包的引用问题,但是企业项目是有私密的,这涉及到私有包的导入问题。

找到一篇写的比较细致的文章:https://segmentfault.com/a/1190000021127791

按go的版本区分并做了细致的说明,我所安装的版本是1.14,解决思路如下:

1、通过GOPRIVATE设置私有库路径匹配

2、go get命令是走的https协议,对于私有git类型的远程仓库需要强制转换为ssh协议

假设你的私有git仓库地址为:https://github.com/private_org/private_repo

那么你的私有mod的名称应该是这个:github.com/private_org/private_repo

1、设置GOPRIVATE环境变量指定那些包或路径前缀不走公开代理

go env -w GOPRIVATE="github.com/private_org/private_repo"

GOPRIVATE支持前缀通配匹配,如果你还有一个私有包:github.com/private_org/private_repo_01 ,可以改写:

go env -w GOPRIVATE="github.com/private_org/private_repo,github.com/private_org/private_repo_01"

因为支持前缀通配匹配,可以如下改写,这样就意味着github.com/private_org下所有包都是私有包

go env -w GOPRIVATE="github.com/private_org"

2、设置git强制走ssh协议get私有包代码

因为go get默认走https协议,私有包肯定都不能直接通过一个url来下载代码的,而是需要先登录,而ssh刚好可以透明的处理鉴权这一步,而刚好git又支持这么一个功能:即强制将http或https协议的远程仓库抓取透明的变更为ssh协议。

文本编辑器打开~/.gitconfig文件,加入如下内容:

[url "git@github.com:"]
	insteadOf = https://github.com

当然你也可以命令行直接操作:

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

上述的配置的含义就是:当操作远程仓库时,你的仓库地址里含了https://github.com就替换为git@github.com:,也就是https协议从git拉代码变成了ssh协议拉代码。当你通过ssh协议能正常操作该私有库时,go get时就能正常拉取到私有库代码了。所以言外之意就是:对于这个私有库你的ssh key是要能访问到的,否则上述一顿操作猛如虎也是白搭!

当然如果你的地址不是github的,其原理是一样的,更换对应你自己的git远程仓库域名即可。

注:上述均是假设你的私有库使用了git来管理代码,其他非主流的版本管理工具不甚了解,这儿找不到答案咯

转载请注明本文标题和链接:《Go1.14及其以上GoMod私有库配置
分享到:

相关推荐

哟嚯,本文评论功能关闭啦~