背景


由于之前写k8s operator在引入go的包的时候,涉及到go的包管理工具,因为自己写java已经很多年,maven的包管理工具很是好用,便想到golang是否也有类似的工具, goer都知道go的包引入带上github.com类似的前缀,就会自动从go的第三方检索服务pkg.go.dev下载对应的文件,而该检索服务会定期从github更新最新的代码。


go mod 是golang 1.11版本引入的。相对于之前要么是没有包管理,要么是管理工具不好用


使用


查看golang的版本,确保在1.11及以上版本

go version

go version go1.15.2 darwin/amd64

设置GO111MODULE为on

GO111MODULE 有三个值 : off,on,auto(默认)

off 关闭go mod的功能,查找包沿用一起的GOPATH模式或者通过vendor目录方式

on 开启go mod功能,不会去查找GOPATH目录

auto,分情况,

当前目录在GOPATH/src之外且该目录包含go.mod文件,会开启go mod功能

当前文件在包含go.mod文件的目录下面

初始化项目

直接在当前项目下执行go mod init,则会在当前项目下建立go.mod文件

如果该项目在GOPATH目录下,且没设置GO111MODULE为on,则会报错:

go build

如果有存在包依赖冲问题,直接修改按照提示修改go.mod文件对应的版本就可以。

如:

go build

如果有存在包依赖冲问题,直接修改按照提示修改go.mod文件对应的版本就可以。

如:

直接修改k8s.io/client-go v11.0.0+incompatible为k8s.io/client-go v0.19.4 即可


关于使用go mod管理的话,依赖包的下载会下到 G O P A T H / p k g / m o d 目 录 下 , 而 不 再 是 GOPATH/pkg/mod目录下,而不再是 GOPATH/pkg/mod目录下,而不再是GOPATH/src目录下