【go系列3】go 的包管理工具go modules的使用
source link: https://studygolang.com/articles/31928
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
背景
由于之前写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/[email protected]+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目录下
有疑问加站长微信联系(非本文作者)
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK