GO Module

一个模块是相关Go包的集合。 modules是源代码交换和版本控制的单元。 go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。 modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。

go module从1.11开始支持,需要下载版本;

GO111MODULE

取值为 off, on, or auto (默认值,因此前面例子里需要注意2个重点)。

基本功能

> go help 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'.   <--- 使用 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 (下载依赖的module到本地cache))
        edit        edit go.mod from tools or scripts (编辑go.mod文件)
        graph       print module requirement graph (打印模块依赖图))
        init        initialize new module in current directory (再当前文件夹下初始化一个新的module, 创建go.mod文件))
        tidy        add missing and remove unused modules (增加丢失的module,去掉未用的module)
        vendor      make vendored copy of dependencies (将依赖复制到vendor下,只会下载你代码中引用的库)
        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.mod 语法

每个模块下有两个文件:

go.mod 格式如下:

module my/project

require other/project v1.0.2
require new/project v2.3.4


exclude old/project v1.2.3

replace bad/project v1.4.5 => good/project v1.4.5
replace golang.org/x/text => github.com/golang/text v0.3.0

相同的部分可以写在一起:

require (
    other/project v1.0.2
    new/project v2.3.4
)

部分特殊格式:

require (
    github.com/natefinch/lumberjack v2.0.0+incompatible
    github.com/golang/mock v1.2.0 // indirect
)

部分特殊格式:

版本编号

可以通过 go get github.com/group/project@<version> 添加依赖项目, 其中<version>的格式可以是:

部分特殊格式:

require (
    gopkg.in/yaml.v2 <=v2.2.1   
    gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
    golang.org/x/time v0.0.0-20181108054448-85acf8d2951c // indirect
    github.com/natefinch/lumberjack v2.0.0+incompatible
    github.com/golang/mock v1.2.0 // indirect
)

部分特殊格式:

go get 升级