在 Go 语言中,装包和管理依赖主要靠 go get 这条命令。
Go 包的安装
装包有三条路:
使用
go get命令(管理依赖):shgo get <package-import-path>例如,要为当前模块添加
github.com/gin-gonic/gin依赖,可以使用:shgo get github.com/gin-gonic/gin注意:从 Go 1.17 开始,
go get不再构建和安装包,只负责调整go.mod中的依赖。如果要安装命令行工具(可执行程序),应使用带版本后缀的go install:shgo install golang.org/x/tools/cmd/goimports@latest使用
go mod命令: 在使用 Go Modules 管理依赖时,可以在go.mod文件中添加依赖,然后使用go mod tidy或go mod download来下载依赖包。shgo mod tidy或者
shgo mod download手动下载并安装包: 可以从特定的源码仓库手动克隆包并将其放置在适当的
GOPATH路径下,然后运行go install。shgit clone <package-repo-url> cd <package-directory> go install
go get 的原理
go get 命令的主要作用是从远程仓库中获取 Go 包,并将其安装到本地的 GOPATH 或 go.mod 管理的目录中。具体过程如下:
解析包路径:
go get解析你提供的包路径,并确定包所在的远程仓库。例如,路径golang.org/x/tools/cmd/goimports会解析到 Golang 官方的工具库中。获取仓库信息:
go get从解析出的包路径中提取出版本控制信息(如 Git、Mercurial 等),并获取该仓库的最新代码。下载包代码:
go get使用对应的版本控制工具(如 Git)将包代码下载到本地模块缓存目录中(默认在$GOPATH/pkg/mod中)。更新依赖: 在 Go 1.17 及之后的版本中,
go get只会下载源码并更新依赖,不会构建和安装包。需要安装可执行程序时,请使用go install <package>@<version>。更新依赖文件: 在 Go Modules 模式下,
go get会更新go.mod和go.sum文件,以确保所有依赖的版本一致。
示例
假设我们要安装 github.com/gin-gonic/gin 这个包,可以运行:
go get github.com/gin-gonic/gin在 go.mod 文件中会看到类似如下内容:
module your_module_name
go 1.16
require (
github.com/gin-gonic/gin v1.7.4
)go.sum 文件会记录包的哈希值和依赖关系:
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,依赖出了问题就在这两个文件里查。