概述
go module导入gitlab私有库
gitlab
、private
、subgroup
、go get
、go module
、goproxy
由于golang的开发,多多少少会引入一些被*的依赖,因此在使用go module管理时,我们都喜欢设置代理,这样不仅能够访问到被*的依赖库,还能加快依赖的下载速度。目前国内的不错的go-module代理地址:https://goproxy.cn。
1、添加go proxy
# direct 表示代理走不通时,使用直接连接
go env -w GOPROXY="https://goproxy.cn,direct"
2、设置私有库:
go env -w GOPRIVATE="github.com/myprivate/*,gitlab.ce/*"
设置私有库后,go会自动设置GONOPROXY
,GONOSUMDB
两个环境变量,表示私有库不走代理,也不检查代码sum。
执行这两个步骤,可以解决大部分私有库导入问题。但是在go 1.13.3之前,如果导入的是gitlab中的且存在subgroup的依赖库(比如:gitlab.com/myname/mysubgroup/myproject),还存在这问题。
在go项目代码中,导入库时,往往需要在依赖库的版本库跟地址后面加上.git后缀(如果依赖库的根路径还有其他子包,则gitlab.com/myname/mysubgroup/myproject.git/mysubpackage),才能让go get正确下载。这里有两种情况:
- 依赖库使用了go module管理;
- 依赖库没有使用go module管理;
第一种情况: 下载完成后,go会检测依赖库的go.mod定义的包名和你导入的包名是否一致,不一致则导入失败。Fail
第二种情况:由于没有go.mod可供检查,所以可以导入。OK
这两种情况,怎么看怎么别扭。
go 1.13.3之后,支持gitlab的subgroup中的依赖库,可以不加.git后缀,但是必须具有gitlab的相应的权限,也就是带上账号密码才能查看subgroup下面的依赖库,否则gitlab只返回subgroup的路径给go get。
如果你使用了go 1.13.3及之后的版本,则可以在HOME目录下编辑.netrc文件(这玩意也可以用来保存github的账号密码,避免每次都要输入账号密码),没有则创建,输入以下文本,并保存:
machine gitlab.mydomain
login username
password mypassword
配置完之后,则可以使用以下命令下载依赖包,并且可以在项目中正常导入依赖包:
go get -v gitlab.com/myname/mysubgroup/myproject/mysubpakcage
另外:
使用自建gitlab,版本须在11.7.0
及之后,此版本后,才支持go使用basic auth
,也就是账号密码授权。gitlab官网已支持。11.7.0
之前的版本需要一个warden的东西,不知道这个干嘛用的,它需要账号和token授权,可能需要在自建gitlab服务端配置才能生效。
最后
以上就是甜美芹菜为你收集整理的go module导入gitlab私有库的全部内容,希望文章能够帮你解决go module导入gitlab私有库所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复