我的环境:
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才行。