一、背景
在日常开发中经常需要导入自己私有库的包文件,但是使用
GOPROXY=https://goproxy.cn,direct
以后 默认下载包会从代理路径进行下载。私有仓库例如
e.coding.net 不是https
www.test:6000 不是 80端口
173.9.78.90 直接ip
这类的符合规范的宝路径可能会下载不出来那么要怎么处理呢?在代码里肯定不能如下使用
import (
"e.coding.net/micro-order/config"
"www.test:6000/micro-order/config"
"173.9.78.90 /micro-order/config"
)
二、处理路径不规范办法
1.在这类异常的url路径我们可以借助git 替换成正常的url
git config --global url."http://www.test:6000/".insteadof "https://www.test.cn/"
也就是说在使用go get -v 的时候会替换掉www.test:6000 为 htts://www.test.cn 这样就能正常下载了。 这里关于go get -v 如何找到包地址的原理请参考如下文章
私有化仓库的 GO 模块使用实践https://studygolang.com/articles/35235https://studygolang.com/articles/35235
三、处理私有库导入问题
1.例如在coding仓库中有一个public项目 caoxiukang123456/micro-order git 仓库地址
https://e.coding.net/caoxiukang123456/micro-order/micro-order.git 直接使用
go get https://e.coding.net/caoxiukang123456/micro-order/micro-order.git
会报错因为路径不符合规范,因为路径中出现了 :
2.尝试修改go.mod文件如下 同样会报错这是
go get 会从默认的代码管理工具 如git ,snv,hg拉取代码。golang将内置的这些托管平台代码 映射匹配到如github,apache等。
另外 也会通过设置的代理路径 GOPROXY=https://goproxy.cn,direct 中去拉去代码
所以私人的库是没法找且下载的。
3.在go 1.13版本后增加了GOPRIVATE 环境变量
go env -w GOPRIVATE=e.coding.net
通过它可以将 e.coding.net设置为私有仓库,单个go get遇到此域名下的所有依赖时,会直接通过git进行。这样解决了私有库的问题
此时编辑器上已经不爆红
4.导入包名问题
在开始直接引入包的时候由于示例中 的包名 是micro-order在使用 go mod init 新建的时候将包名 定义成 order,此时在使用
replace caoxiukang123456/micro-order => e.coding.net/caoxiukang123456/micro-order/micro-order.git v1.0.1 导入包名的时候会报错
module declares its path as: order
but was required as: caoxiukang123456/micro-order
这是因为在该包中设置的 名字为order 但是外部引入他的时候又使用了caoxiukang123456/micro-order 为包名,解决办法就是 将之前的项目 go.mod 删掉,从新
go mod init caoxiukang123456/micro-order 即可 或者引入 时修改成
replace order => e.coding.net/caoxiukang123456/micro-order/micro-order.git v1.0.1