4

【go系列3】go 的包管理工具go modules的使用

 3 years ago
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.
neoserver,ios ssh client

背景

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

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

使用

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

go version
go version go1.15.2 darwin/amd64

  1. 设置GO111MODULE为on

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

  • off 关闭go mod的功能,查找包沿用一起的GOPATH模式或者通过vendor目录方式
  • on 开启go mod功能,不会去查找GOPATH目录
  • auto,分情况,

    1. 当前目录在GOPATH/src之外且该目录包含go.mod文件,会开启go mod功能
    2. 当前文件在包含go.mod文件的目录下面
  1. 初始化项目

    直接在当前项目下执行 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目录下

有疑问加站长微信联系(非本文作者)

eUjI7rn.png!mobile

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK