天天看点

golang之go mod自动下载私有仓库gitlab中的包

我的环境:

golang:  v1.13.5

系统:window10, window7, linux(centos)

环境变量:GOPROXY=https://proxy.cn,direct

假如我在私有仓库http://gitlab.mylab.com上有个hello/hi包,地址当然就是http://gitlab.mylab.com/hello/hi,有发布tag v1.0.0。

在我的go项目里引用:

main.go:

package main

import (

    _  "hello/hi"

)

func main(){

}
           

go.mod:

module  main

require (

       hello/hi v1.0.0

)

//通过replace设置, go get、go mod download等命令过程会去下载gitlab.mylab.com/hello/hi v1.0.0

replace hello/hi v1.0.0 => gitlab.mylab.com/hello/hi v1.0.0
           

先说windows系统上:

直接编译,会报https 443端口连接错误,拉不到gitlab项目,当然了,因为gitlab 是http 80端口。

在项目所在目录执行如下命令也是一样报错。

go mod download hello/hi
           

然后执行了一句命令:

go get -insecure hello/hi
           

这样拉下来一次(如果配置了GOPATH环境变量,拉下来的包在${GOPATH}/pkg/mod里,否则是在${USER}/go/pkg/mod里)之后,神奇的事情发生了,直接编译可以成功拉到gitlab上的包了。

并且执行如下命令也可以成功拉取了:

go mod download hello/hi
           

尴尬的是,再执行go get -insecure hello/hi反而报错:missing dot in first path element。

再来说centos系统:

与windows设不设GOPRIVATE都一样的情况略有差异,linux上必需要先设置环境变量GOPRIVATE="我的gitlab地址",告诉go这是一个私有仓库,不要用代理去拉,而是直接拉。好了,剩下的与windows一样,还是要先执行一次go get -insecure hello/hi才行。