Skip to content

在 Go 语言中,装包和管理依赖主要靠 go get 这条命令。

Go 包的安装 ​

装包有三条路:

  1. 使用 go get 命令(管理依赖):

    sh
    go get <package-import-path>

    例如,要为当前模块添加 github.com/gin-gonic/gin 依赖,可以使用:

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

    注意:从 Go 1.17 开始,go get 不再构建和安装包,只负责调整 go.mod 中的依赖。如果要安装命令行工具(可执行程序),应使用带版本后缀的 go install:

    sh
    go install golang.org/x/tools/cmd/goimports@latest
  2. 使用 go mod 命令: 在使用 Go Modules 管理依赖时,可以在 go.mod 文件中添加依赖,然后使用 go mod tidy 或 go mod download 来下载依赖包。

    sh
    go mod tidy

    或者

    sh
    go mod download
  3. 手动下载并安装包: 可以从特定的源码仓库手动克隆包并将其放置在适当的 GOPATH 路径下,然后运行 go install。

    sh
    git clone <package-repo-url>
    cd <package-directory>
    go install

go get 的原理 ​

go get 命令的主要作用是从远程仓库中获取 Go 包,并将其安装到本地的 GOPATH 或 go.mod 管理的目录中。具体过程如下:

  1. 解析包路径: go get 解析你提供的包路径,并确定包所在的远程仓库。例如,路径 golang.org/x/tools/cmd/goimports 会解析到 Golang 官方的工具库中。

  2. 获取仓库信息: go get 从解析出的包路径中提取出版本控制信息(如 Git、Mercurial 等),并获取该仓库的最新代码。

  3. 下载包代码: go get 使用对应的版本控制工具(如 Git)将包代码下载到本地模块缓存目录中(默认在 $GOPATH/pkg/mod 中)。

  4. 更新依赖: 在 Go 1.17 及之后的版本中,go get 只会下载源码并更新依赖,不会构建和安装包。需要安装可执行程序时,请使用 go install <package>@<version>。

  5. 更新依赖文件: 在 Go Modules 模式下,go get 会更新 go.mod 和 go.sum 文件,以确保所有依赖的版本一致。

示例 ​

假设我们要安装 github.com/gin-gonic/gin 这个包,可以运行:

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

在 go.mod 文件中会看到类似如下内容:

go
module your_module_name

go 1.16

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

go.sum 文件会记录包的哈希值和依赖关系:

plaintext
github.com/gin-gonic/gin v1.7.4 h1:ZjAtzNWBc+t1OXcMGYWZzwE7Em8oUVQz1SoNQoVDhnQ=
github.com/gin-gonic/gin v1.7.4/go.mod h1:ZZFzY1G5e/oDpUsGtcj0FJ/h4ug9Qt68N/m9uITtdlI=

版本号落在 go.mod,校验和落在 go.sum,依赖出了问题就在这两个文件里查。

参考资料 ​

同层页面 ​

相关页面 ​

Hello Golang