一、go mod是什么?
1.1、背景
Golang从诞生之初就一直有个被诟病的问题:缺少一个行之有效的“官方”包依赖管理工具。
那为啥会出现这样的一个问题呢?
原因:在Google内部,所有人都是在一个代码库上进行开发的,因此包依赖管理工具并不是非常需要。但Golang变成一个社区化的工程语言之后,这个问题被放大了。
1.2、Go mod定义
go mod其实就是一个Modules,关于Modules的官方定义为:
Modules是相关Go包的集合,是源代码交换和版本控制的单元。简单的说就是一个类似索引文件,里面包含依赖哪些模块。
go命令直接支持使用Modules,包括记录和解析对其他模块的依赖性。
1.3、Go mod 优点
1、排除来GOPATH的无法有效的管理版本依赖,没有一个地方能够表明依赖包的具体版本号,无法形成有效的版本配套关系的缺点。
2、排除使用vendor这个特性,vendor它能够很好的管理工程,但是它会使得每一个工程都会有一个单独的vendor,非常浪费硬盘,可能导致ide直接卡死。
3、Go Modules相关是一个索引文件,不需要包含src,bin等子目录,只要目录下包含go.mod文件即可。
接下来,先来看看怎么用的吧!
二、如何使用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(默认值)
- GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
- GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
- GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。
简单说就是以下两种情况会使用go mod功能,分别是:
- 当前目录在GOPATH/src之外且该目录包含go.mod文件
- 当前文件在包含go.mod文件的目录下面。
三、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来管理,简单方便,同时加快效率
如果你喜欢我的文章,请关注我的公众号哈~ 我会持续不断的输出新内容哈~感谢诸位
更多精彩内容,关注下面的微信公众号~
有疑问加站长微信联系(非本文作者)