天天看點

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才行。