go mod

go mod #

go mod是go内置的包管理工具,项目管理工具
Golang 1.11 版本引入的 go mod ,其思想类似maven:摒弃vendor和GOPATH,拥抱本地库
从Go1.13版本开始,go module将是Go语言默认的依赖管理工具
查看go版本:go version
命令帮助: go help mod
Usage:
    go mod <command> [arguments]
The commands are:
    download    download modules to local cache 下载依赖模块到本地cache目录中(GOPATH/pkg/mod),如 go mod download
    edit        edit go.mod from tools or scripts 编辑go.mod文件
    graph       print module requirement graph 打印模块依赖图
    init        initialize new module in current directory,在当前目录初始化一个新模块,生成go.mod文件,如 go mod init hello
    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 help mod init

初始化一个go.mod配置:
localhost:ttt jelly$ go mod init hello
    go: creating new go.mod: module hello
localhost:ttt jelly$ ls
    go.mod
localhost:ttt jelly$ cat go.mod
    module hello

go.mod 在项目根目录下,用于配置项目依赖,记录了依赖包及其版本号,go.mod文件配置格式如下:
    module 模块名,如 module hello
    require ( //指定的依赖项模块,可选
        github.com/BurntSushi/toml v0.3.1   //配置依赖模块地址和版本,多个配置多行
        github.com/DataDog/zstd v1.3.5
    )
    replace ( //替换依赖项模块,可选
    )
    exclude ( //忽略依赖项模块,可选
    )

go.sum 记录所依赖的项目的版本的锁定,类似composer-lock.json,package-lock.json文件


执行go build , go test, 甚至 go list等命令时,会自己去修改go.mod文件,配置项目的依赖

环境变量:export GO111MODULE=on  #有三个值:on、off、auto,默认值为auto
    off: 关闭模式,GOPATH mode,表示查找vendor和GOPATH目录,使用$GOPATH方式管理依赖
    on:启动模式,module-aware mode,使用 go module模式,忽略GOPATH目录,依赖包下载到$GOPATH/pkg/mod
    auto:自动模式,项目在$GOPATH/src之外则使用go.mod方式,项目在$GOPATH/src目录下则使用旧方式

Build by Loppo 0.6.15