初始化

对于新项目或已有的非 go module 管理的项目,可以执行下面的命令来进行初始化:

go mod init <packagename>

 

packagename 是模块的引入路径,例如 github.com/pkg/test 等

初始化完成后,在当前目录会自动生成 go.mod 文件,里面只有一行文本:

 

 

添加依赖

手动添加

你可以参考上文,在 go.mod 中手动添加依赖的模块

通过下面的命令,可以将 go.mod 中声明的包下载到本地:

go mod download

 

go get 获取

也可以通过执行 go get 命令获取依赖:

go get github.com/pkg/xxx@v1.0.1

 

@v1.0.1 指定了版本,如果不指定则会自动寻找 v1 版本以下的最新版本

同时,你也可以指定 @latest 来要求 golang 自动更新到最新版本

你也可以换成指定的 commit_id:

  • gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
  • gopkg.in/vmihailenco/msgpack.v2 v2.9.1
  • gopkg.in/yaml.v2 <=v2.2.1
  • github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e
  • go get github.com/pkg/xxx@latest

 

例如:

go get -u github.com/pkg/xxx@v1.2.1

 

自动拉取依赖

完成代码的编写后,执行 go build 或 go test 命令,相应工具会自动拉取依赖

 

依赖整理

在编写代码的过程中,往往会在 go.mod 文件中添加过多的依赖,golang 也提供了相应工具来整理依赖,增加丢失的依赖,删除无用依赖:

go mod tidy

 

升级依赖

通过命令 go get 增加 -u 参数,可以将指定包升级到指定版本:

  • 运行 go get -u 将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)
  • 运行 go get -u=patch 将会升级到最新的修订版本
  • 运行 go get package@version 将会升级到指定的版本号version

 

他会把 go.mod 的 latest 版本换成实际的最新的版本,并且会生成一个 go.sum 记录每个依赖库的版本和哈希值

 

依赖查询

go list all

通过 go list all 命令可以列出项目依赖的所有包

 

go mod why

go module 支持使用 go mod why 的模式查询项目为什么需要某个依赖,例如:

go mod why -m github.com/pkg/test

 

会输出从当前项目到 github.com/pkg/test 这个模块的最短依赖链

 

go mod graph

go mod graph 输出结果有两列,前者是一个库,后者是它的依赖

通过这个输出,我们可以绘制整个项目依赖的有向无环图