初始化
对于新项目或已有的非 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 输出结果有两列,前者是一个库,后者是它的依赖
通过这个输出,我们可以绘制整个项目依赖的有向无环图