GO111MODULE=off,go会从vendor和GOPATH寻找包
GO111MODULE=on,go不会从vendor和GOPATH寻找包,直接加载go. mod加载包
-
通过vendor 编译
0:GO111MODULE=off
1:go get -u -v github. com/kardianos/govendor
2:govendor add +e(生成vendor文件)
3:go build main. go -
通过mod编译
0:GO111MODULE=on
1:go mod init (生成go.mod文件)
2:go build main. go -
通过glide文件
0:GO111MODULE=off
1:brew install glide (mac需要安装)
2:glide init (生成glide.yaml)
3:glide install
4:go build main. go
go build遇到的坑
tree目录详情
tree root
.
|-- README
| |-- animal
| |-- tiger
| |-- cat
| |-- dog
操作过程
修改根目录animal下的代码,cat在go build时用的go.mod还是旧的
报错如下:
#github.com/coreos/etcd/clientv3/balancer/picker
/Users/didi/go/pkg/mod/github.com/coreos/etcd@v3.3.22+incompatible/clientv3/balancer/picker/err.go:37:44: undefined: balancer.PickOptions
/Users/didi/go/pkg/mod/github.com/coreos/etcd@v3.3.22+incompatible/clientv3/balancer/picker/roundrobin_balanced.go:55:54: undefined: balancer.PickOptions
#github.com/coreos/etcd/clientv3/balancer/resolver/endpoint
/Users/didi/go/pkg/mod/github.com/coreos/etcd@v3.3.22+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:114:78: undefined: resolver.BuildOption
/Users/didi/go/pkg/mod/github.com/coreos/etcd@v3.3.22+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:182:31: undefined: resolver.ResolveNowOption
原因分析
原因:根目录的go.mod文件的etcd导入和当前目录的go.mod文件的etcd导入冲突
解决:删除根目录的mod文件
解决方式
修改cat的mod版本号为修改后的分支名,这里注意必须先提交到git才能使用,这里用起来有些别扭,
可以通过replace用本地的最新版代替,在根目录下创建mod只写go版本号等信息,然后replace gihub.com/amber/xxx => /Users/amber/go/src/xxx
这样即使没提交到git上,仅修改本地代码也可以build最新代码