7

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

 4 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

Recommend

  • 88

    虽然人工智能的云计算管理工具目前还处于采用的早期阶段,但IT行业专家表示采用这样的工具可以减少与性能和根本原因分析相关的大量工作。那些致力于深入了解云计算基础设施和应用程序性能的管理员将迎来一个新的盟友:人工智能。

  • 31
    • studygolang.com 6 years ago
    • Cache

    govendor包管理工具的使用

    govendor简介 golang工程的依赖包经常使用go get命令来获取,例如: go get github.com/kardianos/govendor ,会将依赖包下载到GOPATH的路径下。 常用的依赖包管理...

  • 47

  • 53

    原文作者: dryyun 原文链接: https://dryyun.com/2018/11/28... 基本介绍 ...

  • 43
    • www.tuicool.com 5 years ago
    • Cache

    Golang中的包管理工具 - Go Modules

    GO包管理的前世今生 先来了解下Go包管理的发展历程 GOPATH 在Go1.5之前使用GOROOT和GOPATH这2个系统环境变量来决定包的位置,对于开发者主要使用GOPATH。GOPATH 解决了第三方源码依赖的问题,看一下我本机

  • 55

    GO包管理的前世今生 先来了解下Go包管理的发展历程 GOPATH 在Go1.5之前使用GOROOT和GOPATH这2个系统环境变量来决定包的位置,对于开发者主要使用GOPATH。GOPATH 解决了第三方源...

  • 49

    以前写过一篇关于go管理依赖包工具 dep的文章,当时认为dep将会成为官方依赖工具,现在看来是自己图样图斯内幕破了,正如官方一直提到dep是“official experiment”官方实验项目的那样,随着go modules 在go1.11版推出,go1.12版功能不断改进...

  • 29
    • studygolang.com 5 years ago
    • Cache

    Golang包管理工具govendor的使用

    1. govendor简介 golang工程的依赖包经常使用go get命令来获取,例如:go get github.com/kardianos/govendor ,会将依赖包下载到GOPATH的路径下。 常用的依赖包管理工具有godep,govendor等,在Golang1.5之后,Go提...

  • 22
    • studygolang.com 5 years ago
    • Cache

    go 代码依赖管理工具mod使用

    什么是go mod Go.mod是Golang1.11版本新引入的官方包管理工具用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。类似于php的composer,java的maven; Go.mod其实就是一个Modules,关于Modules的官方定...

  • 9

    Node系列 | Node版本管理工具 fnm

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK