Skip to content

go 工具链

go get

sh
go get -u github.com/xx/go-xx
go get github.com/xx/go-xx@v1.2.3

模块

sh
go mod init {mymodule}
go mod tidy

在 Go 项目中,go mod 是 Go 语言的模块化管理工具,它用于管理项目的依赖关系、版本控制以及构建项目的环境。go mod 自 Go 1.11 版本开始引入,旨在简化和标准化 Go 项目的依赖管理。

1. 初始化 Go 模块

要初始化一个 Go 项目,并启用模块管理,你需要在项目根目录下运行:

bash
go mod init <module-name>

其中 <module-name> 是你希望为模块设置的名称,通常是你的项目的路径或者版本控制的 URL(例如,github.com/user/project)。

这个命令会在你的项目根目录下生成一个 go.mod 文件,这个文件用于记录模块的基本信息和项目依赖。

2. go.mod 文件

go.mod 文件包含了关于 Go 模块的信息,主要包括:

  • module:模块的名称。
  • go:Go 语言的版本。
  • require:列出项目依赖的模块及其版本。
  • replace(可选):用于替换模块版本或路径。
  • exclude(可选):排除不想使用的模块版本。

示例 go.mod 文件:

go
module github.com/user/project

go 1.19

require (
    github.com/gin-gonic/gin v1.7.4
    github.com/sirupsen/logrus v1.8.1
)

3. 添加依赖

当你需要引入外部包时,可以直接通过 go get 命令安装:

bash
go get github.com/gin-gonic/gin

这会将 gin 包和它的依赖下载到 go.modgo.sum 文件中,并更新这些文件的记录。

4. go.sum 文件

go.sum 文件包含每个依赖包的加密哈希值,确保项目在构建时使用的是相同的版本,避免因依赖的变动而导致构建问题。

5. 更新依赖

如果你想更新某个依赖包,可以使用:

bash
go get <package-name>@latest

或者指定某个版本:

bash
go get <package-name>@v1.2.3

更新后的依赖会反映在 go.modgo.sum 中。

6. 移除未使用的依赖

Go 会自动移除不再使用的依赖包,但你也可以手动执行以下命令,清理不再需要的依赖:

bash
go mod tidy

这个命令会删除 go.mod 中未被使用的依赖,并更新 go.sum 文件。

7. 构建和运行项目

使用 Go 模块管理时,你依然可以像平常一样使用 go rungo build 等命令:

bash
go run main.go
go build

这些命令会根据 go.mod 中记录的依赖来构建项目,并确保使用正确版本的依赖。

8. 查看当前模块的依赖

如果你需要查看当前模块的所有依赖(包括 transitive 依赖),可以使用:

bash
go list -m all

9. 查看和下载依赖

如果你想要下载所有依赖包,可以运行:

bash
go mod download

10. 使用 replace 指令

如果你需要临时替换某个模块的路径或版本,可以在 go.mod 中使用 replace 指令。例如,如果你希望使用本地的某个库:

go
replace github.com/some/module v1.2.3 => /path/to/local/module

11. 使用 exclude 指令

exclude 指令允许你排除某个版本的依赖模块。例如:

go
exclude github.com/some/module v1.2.3

12. 工作区模式(Go 1.18及以后)

从 Go 1.18 开始,引入了工作区模式(Go Workspaces)。如果你的项目由多个模块组成,可以使用 go.work 文件来管理工作区的多个模块。你可以使用以下命令创建工作区:

bash
go work init

然后在 go.work 中列出多个模块路径。

总结

  • go.mod 文件:管理模块信息和依赖版本。
  • go.sum 文件:记录模块的哈希值,保证依赖一致性。
  • 常用命令:
    • go mod init:初始化模块。
    • go mod tidy:清理不必要的依赖。
    • go get:添加、更新依赖。
    • go rungo build:构建和运行项目。

通过使用 Go 模块,Go 语言的依赖管理变得更加方便,避免了版本冲突和依赖不一致的问题。