我的環境:
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纔行。