Go系列 | 0二、Go包管理工具-Go mod

1、go mod是什么?

1.一、背景

Golang从诞生之初就一直有个被诟病的问题:缺乏一个行之有效的“官方”包依赖管理工具。shell

那为啥会出现这样的一个问题呢?缓存

缘由:在Google内部,全部人都是在一个代码库上进行开发的,所以包依赖管理工具并非很是须要。但Golang变成一个社区化的工程语言以后,这个问题被放大了。微信

1.二、Go mod定义

go mod其实就是一个Modules,关于Modules的官方定义为:ide

Modules是相关Go包的集合,是源代码交换和版本控制的单元。简单的说就是一个相似索引文件,里面包含依赖哪些模块。工具

go命令直接支持使用Modules,包括记录和解析对其余模块的依赖性。学习

1.三、Go mod 优势

一、排除来GOPATH的没法有效的管理版本依赖,没有一个地方可以代表依赖包的具体版本号,没法造成有效的版本配套关系的缺点。ui

二、排除使用vendor这个特性,vendor它可以很好的管理工程,可是它会使得每个工程都会有一个单独的vendor,很是浪费硬盘,可能致使ide直接卡死。spa

三、Go Modules相关是一个索引文件,不须要包含src,bin等子目录,只要目录下包含go.mod文件便可。命令行

接下来,先来看看怎么用的吧!版本控制

2、如何使用go mod

1.首先将go的版本升级为1.11以上

2.设置GO111MODULE,首先咱们用在terminal上用go env能够看到此时go module默认是关闭的,那可使用下述命令将其打开

➜  ~ go env
GO111MODULE="off"
GOARCH="amd64"
GOBIN=""
...
➜  ~ go env -w GO111MODULE=on
➜  ~ go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
...

GO111MODULE简介:有三个值,分别是:off, on和auto(默认值)

  1. GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种经过vendor目录或者GOPATH模式来查找。
  2. GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
  3. GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。

简单说就是如下两种状况会使用go mod功能,分别是:

  • 当前目录在GOPATH/src以外且该目录包含go.mod文件
  • 当前文件在包含go.mod文件的目录下面。

3、go mod常见命令

下面会简单的列举如下 go mod的常见命令,你们能够参考使用

➜  ~ go mod
Go mod provides access to operations on modules.

Note that support for modules is built into all the go commands,
not just 'go mod'. For example, day-to-day adding, removing, upgrading,
and downgrading of dependencies should be done using 'go get'.
See 'go help modules' for an overview of module functionality.

Usage:

    go mod <command> [arguments]

The commands are:

    download    download modules to local cache                         //下载模块到本地缓存
    edit        edit go.mod from tools or scripts                     // 从工具或脚本中编辑go.mod文件
    graph       print module requirement graph                             //打印模块需求图
    init        initialize new module in current directory     //在当前目录下初始化新的模块
    tidy        add missing and remove unused modules             //添加缺失的模块以及移除无用的模块
    vendor      make vendored copy of dependencies                     //制做依赖项的自动副本
    verify      verify dependencies have expected content      //验证依赖项是否达到预期的目的
    why         explain why packages or modules are needed     //解释为何须要包或模块

Use "go help mod <command>" for more information about a command.

➜  ~ go help mod init

以上就是本篇关于go mod的全部内容,小白在此仍是推荐全部学习go的小伙伴来使用go mod来管理,简单方便,同时加快效率

若是你喜欢个人文章,请关注个人公众号哈~ 我会持续不断的输出新内容哈~感谢诸位

更多精彩内容,关注下面的微信公众号~
扫码_搜索联合传播样式-标准色版.png

相关文章
相关标签/搜索