Go Modules设置私有库,以及支持HTTP的私有库操作
常规设置
首先Go Mod最好设置Goproxy,这样可以解决很多包拉取的问题:
1 | go env -w GOPROXY="https://goproxy.cn,direct" |
https://goproxy.io
也可以,上面是国内的。
完成设置后,go 命令会从公共镜像 goproxy.io 上下载依赖包,并且会对下载的软件包和代码库进行安全校验,当你的代码库是公开的时候,这些功能都没什么问题。但是如果你的仓库是私有的怎么办呢?
环境变量 GOPRIVATE 用来控制 go 命令把哪些仓库看做是私有的仓库,这样的话,就可以跳过 proxy server 和校验检查,这个变量的值支持用逗号分隔,可以填写多个值,例如:
1 | GOPRIVATE=*.corp.example.com,rsc.io/private |
命令行设置:go env -w GOPRIVATE=private.repo.com
这样 go 命令会把所有包含这个后缀的软件包,包括 git.corp.example.com/xyzzy , rsc.io/private, 和 rsc.io/private/quux 都以私有仓库来对待。
若所有需要配置的私有仓库都存在于一个组织下,如 github 下的组织 org_name,则直接填写组织名即可:
1 | GOPRIVATE=github.com/org_name |
如果要更新不支持https协议的私有库,还需再做如下的配置。
go get -insecure
,但是很麻烦,每个包都需要手动在go mod下导入(go mod自己是不支持HTTP的,这么做是合理的);go env -w GOINSECURE=private.repo.com
,设置GOINSECURE
参数,非常方便。仅在go 1.14
后新加入。
私有不合规的库
上一节是针对的库是私有的情况,但其依然是有局限的地方的,其就要求:
① 私有库是绑定有域名的;
② 端口是 443 或 80 端口;
怎么解决呢,这里我推荐文章:Go Module:私有不合规库怎么解决引用问题 。以下方法均出自该文章,建议直接读原文最nice。
这里借用了现成的版本控制系统(VCS),go get获取包时,会发送一个 HTTP 请求,URL为模块带上协议头和参数( go-get=1 ),去探测目标服务器是否是代码托管服务器,服务器会依此返回一个数据类型,响应Go工具,符合其要求。
简洁的直接将其摆出来,既是:
1 | # 使用Git替换掉原始的Git地址 |
本文标题:Go Modules设置私有库,以及支持HTTP的私有库操作
文章作者:小师
发布时间:2020-12-10
最后更新:2022-05-04
原始链接:chunlife.top/2020/12/10/Go-Modules设置私有库,以及支持HTTP的私有库操作/
版权声明:本站所有文章均采用知识共享署名4.0国际许可协议进行许可