go mod及go work版本管理| 青训营

203 阅读2分钟

go mod

Go Modules是 Go 语言从 1.11 版本之后官方推出的版本管理工具,Modules官方定义为:

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

Go Modules 使用 go.mod 文件进行依赖管理,所有项目中需要使用的模块都在 go.mod 文件中进行维护

  • 模块创建
go mod init <module name>

“go mod init ” 命令创建一个新的模块,初始化描述当前模块的 go.mod 文件,初始时,go mod 文件中仅包含模块路径以及 go 版本。

  • go.sum文件

    当第一次运行 “go build” 或 “go test” 命令时,将安装所有依赖包的特定版本,同时会创建 go.sum 文件,用于维护校验和。(再次运行同一项目,不会再次安装依赖包)

  • require 语句

    go.mod 文件中的 require 会包含项目中所有依赖模块以及对应版本

  • replace 语句

    go.mod 文件中的 replace 指向依赖包的本地版本,通过创建远程版本的本地拷贝,无需从远程进行安装

  • //indirect

    项目并不直接使用这些依赖包,而是存在传递性依赖(transitive dependencies)

  • go mod tidy

    该命令确保 go.mod 文件、go.sum 文件与模块源代码匹配:

  1. 添加缺失的模块依赖编译当前模块包以及依赖包
  2. 移除未被使用的依赖包

When we upgrade the version of a specific package in go.mod we need to run the command go mod tidy to update the checksums in go.sum

go work

go work 是 Go 语言 1.18 版本发布后进行多模块工作区管理的方法,多模块工作区能够让开发者更容易地同时处理多个模块的工作

  • go work init

    初始化工作区文件,用于生成 go.work 工作区文件

  • go work use

    添加新的模块到工作区,模块必须是 go mod 依赖管理的仓库