go get 命令使用说明

二维码
| Apr 28, 2020 | 原创
go get [-d] [-t] [-u] [-v] [-insecure] [build flags] [packages]

go get 命令用于给当前开发的模块(module)添加安装依赖包。go get 首先需要找到最合适的版本。

go get 会尝试对每一个依赖包,进行匹配检测。通常,会使用最新的版本例如:v0.4.5 或者 v1.2.3 。如果无法找到,那么则会尝试寻找预发布的标签标记版本,如:v0.0.1-pre1 。如果,就连预发布的版本标签都无法找到,那么它会尝试寻找最近更新的 commit ,如果模块尚未引用包含具体某个依赖版本,那么默认 go get 将会使用它查找到的版本,否则将会使用已经引用的版本。

默认的版本选择规则可以使用 @version 后者进行覆盖操作,如:

go get golang.org/x/text@v0.3.0

版本号还可以只写部分前缀内容,如:@v1 ,代表的是获取版本 v1 开头的最新版本。可以使用 go help modules 查看go模块化包管理的全部内容章节。

对于存储在版本控制系统中的代码,版本号可以是 commit hash 值,也可能使分支名:

go get golang.org/x/text@master

但分支名如果和版本选择语法有重叠,那么此时则无法选择分支名。如:@v2 代表的是选择以 v2 开头的最新版本代码,而不是分支名为 v2 的代码。

@latest 获取最新的版本
@upgrade 和@latest类似,但无法降级,如果一个模块引用了一个预发布版本比latest版本更新
@patch 补丁版本,主版本号和次版本号相同的版本包,和@upgrade类似,也无法降级

如果包还未被引用使用,那么 @upgrade@patch@latest 效果一致。

间接引用的版本不会被跟新,例如:A 模块引用 B 模块版本为 v1.2.3,如果更新 A 模块,A模块本身会使用最新的版本,但 B模块不会。如果两个模块存在版本竞争关系,go get 会评估选择版本高的一个。

-t 标志指示 go get 考虑对命令行上指定的包生成测试所需的模块。

-u 标志用于更新当前模块所有直接依赖包版本为最新版本或最新补丁版本,但是需要注意,间接的包并不会更新,如模块中引用了 A 模块,A模块间接引用了 B 模块,那么 B 模块的版本不会被更新。除非项目模块同时也使用了 B 模块包。

-t-u 标价如果同时使用,那么测试依赖包也会一同被更新。

-insecure 运行配置加载的依赖包,所在的地址为 http 协议地址,不过会有警告信息。

-d 标志表示只下载源代码,不会 build 和 安装他们。

go get 不带任何参数,默认会作用于当前目录下所以包。 如 go get -ugo get -u=patch 会更新当前目录下所有包文件的依赖版本。如果不带具体包名参数,那么 go getgo install 效果差不多,go get -dgo list 效果也类似。go get -ugo get -u=patch