包管理工具已是编程语言的必备的工具,用于解决项目中复杂的依赖关系,提供包的版本控制、安装、更新等工具。Java 中有 MavenPython 中的 pip,还有 PHPcomposer 等,那么 Go 目前已经有非常成熟的包管理工具:go mod

初始化

在一个还没有使用go mod的项目中,需要使用go mod init初始化。

go mod init example.com/group/demo

上面命令初始化了一个包名为example.com/group/demo的,产生了go.mod文件:

module example.com/group/demo

go 1.23.4

添加依赖

初始化go mod之后,可以使用go get添加项目中将要用到的依赖包。

go get github.com/spf13/cobra

上述命令添加了github.com/spf13/cobra包,也可以指定版本,例如:go get github.com/spf13/cobra@v1.1.1,如果要安装最新版也可以使用 latest,例如:go get github.com/spf13/cobra@latest

如果要更新依赖可以加入-u参数:

go get -u github.com/spf13/cobra

清理依赖

go mod tidy,用于添加丢失的依赖和移除无用的依赖。它会自动发现项目中使用的依赖但没有添加到go.mod中的依赖,也会把项目中没有使用的依赖从go.mod中移除,并且还会更新go.sum,保证所有依赖的校验的完整性。

  • 移除未使用的依赖项
  • 添加缺失的依赖项
  • 更新 go.sum 文件

其他命令

使用go help mod 可以列出所有 go mod命令。

go help mod
  • download 下载所有依赖到缓存
  • edit 修改 go.mod 从工具和脚本
  • graph 打印依赖关系图
  • init 初始化mod在当前目录
  • tidy 添加丢失的和移除无用的依赖模块
  • vendor 将依赖存放在使用vendor目录
  • verify 校验依赖的哈希值
  • why 解释为什么依赖某个模块

最后

go mod是 Go 语言一个强大的包管理工具,从 Go 1.11 版本开始引入,解决了版本依赖的诸多问题,现已经是 Go 项目必备的包管理工具。开发者可以更高效、更便捷的管理项目的依赖,提供项目的可维护性和稳定性,熟悉go mod的用法也是 Go 开发者非常中的技能。