背景
因为之前写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: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'
再执行go build
则会把我的项目依赖的文件主动增加到go.mod中且会生成go.sum文件,
如果有存在包依赖冲问题,间接批改依照提醒批改go.mod文件对应的版本就能够。
如:
../../../../pkg/mod/k8s.io/client-go@v11.0.0+incompatible/kubernetes/scheme/register.go:26:2: module k8s.io/api@latest found (v0.19.4), but does not contain package k8s.io/api/auditregistration/v1alpha1
go.mod
module github.com/monkeyboy123/custom-controller
go 1.15
require (
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
github.com/imdario/mergo v0.3.11 // indirect
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e // indirect
k8s.io/api v0.19.4 // indirect
k8s.io/apimachinery v0.19.4
k8s.io/client-go v11.0.0+incompatible
k8s.io/klog v1.0.0 // indirect
k8s.io/utils v0.0.0-20201110183641-67b214c5f920 // indirect
)
间接批改k8s.io/client-go v11.0.0+incompatible为k8s.io/client-go v0.19.4 即可
对于应用go mod治理的话,依赖包的下载会下到$GOPATH/pkg/mod目录下,而不再是$GOPATH/src目录下