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/