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

喝醉的清茶 · · 557 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

一、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(默认值)

  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文件的目录下面。

三、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


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

本文来自:Segmentfault

感谢作者:喝醉的清茶

查看原文:Go系列 | 02、Go包管理工具-Go mod

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

557 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传