好久不更新博客了,都长草了;被迫营业从头学起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
来管理代码,其他非主流的版本管理工具不甚了解,这儿找不到答案咯
哟嚯,本文评论功能关闭啦~