Go 1.5引入了vendor文件夾,其對語言使用,go命令沒有任何影響。若某個路徑下邊包含vendor文件夾,則在某處引用包時,會優先搜索vendor文件夾下的包。
在Go 1.5開啟該項特性需設置GO15VENDOREXPERIMENT=1,而從Go 1.6開始,該項特性默認開啟。
go get -u -v github.com/kardianos/govendor
如果一個包在vendor和GOPATH下面都存在那么誰會優先使用呢。
優先使用vendor目錄下面的包。
如果vendor下面沒有搜索到,再搜索GOPATH下面的包。
要么完整使用vendor下面的包,要么完整使用GOPATH下面的包,不會混合使用:
3.1 vendor搜索方式 vendor包的搜索方式為:自包引用處,從其所在文件夾查詢是否有vendor文件夾包含所引用包;若沒有,然后從其所在文件夾的上層文件夾尋找是否有vendor文件夾包含所引用包,若沒有,則再搜索上層文件夾的上層文件夾...,直至搜索至$GOPATH/src並搜索完成時止。 例如,如下代碼中,$GOPATH/src/x/y/z/main.go引用了包"v",則不論vendor/v/v.go置於src/,src/x/,src/x/y/,src/x/y/z/中任意一個文件夾下,均可以找到。 $ cat $GOPATH/src/x/y/z/main.go
gopm 可以將項目中的包直接下載到vendor
https://www.jianshu.com/p/db9e6ae0d227
go get -u github.com/gpmgo/gopm
用gopm get -g代替go get
不采用-g參數,會把依賴包下載.vendor目錄下面;
采用-g 參數,可以把依賴包下載到GOPATH目錄中;
使用Goland IDE創建Go項目,使用vendor管理外部引用的包,但是在import包名的時候卻顯示找不到目錄資源。
file --> settings -->Go-->GOPATH-->Project GOPATH 中添加當前項目的項目,必須是src的上層目錄
詳情參考
https://www.jianshu.com/p/a7c3aeb0948d
$ ./main -h panic: sql: Register called twice for driver mysql goroutine 1 [running]: database/sql.Register(0x8152d9, 0x5, 0x8b17e0, 0xb8d610) /opt/app/go/src/database/sql/sql.go:51 +0x184 github.com/go-sql-driver/mysql.init.0() /opt/wks/gopath/src/github.com/go-sql-driver/mysql/driver.go:84 +0x4e
export GO111MODULE=on
export GOPROXY=https://mirrors.aliyun.com/goproxy/
