golang vendor

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/

 

 

 

posted @ 2020-06-24 18:33  方诚  阅读(1386)  评论(0编辑  收藏  举报