go get
命令
go get
命令用来动态获取远程代码包,从代码版本控制系统的远程仓库中检出/更新代码包并对其进行编译和安装- 在内部实际上分成了两步操作:第一步是下载源码包第一个工作区的 src 目录下,第二步是执行
go install
- 目前支持的有 BitBucket、GitHub、Google Code 和 Launchpad。下载源码包的 go 工具会自动根据不同的域名调用不同的源码工具,对应关系如下
- BitBucket (Mercurial Git)
- GitHub (Git)
- Google Code Project Hosting (Git, Mercurial, Subversion)
- Launchpad (Bazaar)
- 这些网站的项目包路径有一个共同标准:远程包路径格式是
网站域名/作者或机构/项目名
- 如
go get github.com/hyper-carrot/go_lib/logging
go get
支持自定义域名的功能,具体参见go help remote
- 除非要求强行更新代码包,否则
go get
命令不会进行重复下载
go get 命令支持的 VCS
- 代码版本控制系统(Version Control System,VCS)
- 这几个版本控制系统都有一个共同点,那就是会在检出的项目目录中存放一个元数据目录,名称为 “.” 前缀加其主命令名
名称 | 主命令 | 说明 |
---|---|---|
Mercurial | hg | Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强 |
Git | git | Git 最开始是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开源的分布式版本控制软件。但现在已被广泛使用。它是被用来进行有效、高速的各种规模项目的版本管理 |
Subversion | svn | Subversion 是一个版本控制系统,也是第一个将分支概念和功能纳入到版本控制模型的系统。但相对于 Git 和 Mercurial 而言,它只算是传统版本控制系统的一员 |
Bazaar | bzr | Bazaar 是一个开源的分布式版本控制系统。但相比而言,用它来作为 VCS 的项目并不多 |
- 对于不知名的网站,需要指出导入路径使用哪种版本控制协议
- 位置由诸如 googlesource.com 或 github.com 之类通用服务托管,包可以在其导入路径中使用自定义域名。其 HTML 网页下包含元数据重定向 go 工具到实际托管地址的服务仓库
go get 的参数
go get
命令可以接受所有可用于go build
命令和go install
命令的参数。这是因为go get
命令的内部步骤中完全包含了编译和安装这两个动作go get
命令还有一些特有的参数
参数 | 描述 |
---|---|
-d | 只下载不安装 |
-f | 只有在包含 -u 参数时才有效,不让 -u 去验证 import 中的每一个都已经获取了,这对于本地 fork 的包特别有用 |
-fix | 在获取源码之后先运行 fix,而后再进行编译和安装 |
-insecure | 允许使用非安全的 scheme(如HTTP)去下载指定的代码包。如果代码仓库(如公司内部的Gitlab)没有 HTTPS 支持,可以添加此标记。请在确定安全的情况下使用它 |
-t | 下载并安装指定的代码包中的测试源码文件中依赖的代码包 |
-u | 强制使用网络更新已有代码包及其依赖包。默认情况该命令只会从网络上下载本地不存在的代码包,而不会更新已有的代码包 |
-v | 显示执行的命令 |