【Go语言系列】go get 命令介绍

摘要:
goget命令可以使用代码管理工具远程拉取或更新代码包及其依赖包,并自动完成编译和安装。此命令可以动态获取远程代码包。目前支持BitBucket、GitHub、Google Code和Launchpad。Go1.8之后,GOPATH默认为用户目录中的go文件夹。例如,如果本地计算机上安装的Go语言版本为1.x,则goget命令将在代码包的远程存储库中查找名为“go1”的标签或分支。Goget更新代码包。更改代码包后,引用包的其他代码块将在使用时更新。

Go语言的代码被托管于 Github.com 网站,该网站是基于 Git 代码管理工具的,很多有名的项目都在该网站托管代码。其他类似的托管网站还有 code.google.com、bitbucket.org 等。

这些网站的项目包路径都有一个共同的标准,参见下图所示。

【Go语言系列】go get 命令介绍第1张

go get 命令可以借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装。整个过程就像安装一个 App 一样简单。

这个命令可以动态获取远程代码包,目前支持的有 BitBucket、GitHub、Google Code 和 Launchpad。在使用 go get 命令前,需要安装与远程包匹配的代码管理工具,如 Git、SVN、HG 等,参数中需要提供一个包名。


这个命令在内部实际上分成了两步操作:第一步是下载源码包,第二步是执行 go install。下载源码包的 go 工具会自动根据不同的域名调用不同的源码工具,对应关系如下:

  • BitBucket (Mercurial Git)
  • GitHub (Git)
  • Google Code Project Hosting (Git, Mercurial, Subversion)
  • Launchpad (Bazaar)

参数介绍:

-u用于下载指定的路径包及其依赖包,默认情况下,不会下载本地已经存在的,只会下载本地不存在的代码包。就是口中常说的更新包 比如:go get -u github.com/jinzhu/gorm。会把最新的 gorm 包下载到你本地
-d此命令仅仅是下载路径包,而不会进行安装。即不会执行 go install 命令
-t 让命令程序同时下载并安装指定的代码包中的测试源码文件中依赖的代码包
-fix让命令程序在下载代码包后先执行修正动作,而后再进行编译和安装。比如,我的代码是用1.7 开发的,现在go 版本已经是1.13 了,有些包已经发生了变化,那么我们在使用go get命令的时候可以加入-fix标记。这个标记的作用是在检出代码包之后,先对该代码包中不符合Go语言1.7版本的语言规范的语法进行修正,然后再下载它的依赖包,最后再对它们进行编译和安装。
-insecure允许命令程序使用非安全的scheme(如HTTP)去下载指定的代码包。如果你用的代码仓库(如公司内部的Gitlab)没有HTTPS支持,可以添加此标记。请在确定安全的情况下使用它。(记得 使用工具 git 时,有个版本就是 http 升级为了https)
-v打印出那些下载的代码包的名字
-f仅在使用-u标记时才有效。该标记会让命令程序忽略掉对已下载代码包的导入路径的检查。如果下载并安装的代码包所属的项目是你从别人那里Fork过来的,那么这样做就尤为重要了
-x打印出整个过程使用了哪些命令
  • go get 下载的包保存在哪里呢?一般他会保存在这个目录:$GOPATH/src , 若你有多个GOPATH(工作区),则会保存在第一个工作区中。获取前,请确保 GOPATH 已经设置。Go 1.8 版本之后,GOPATH 默认在用户目录的 go 文件夹下。
  • go get 检出或更新代码包之后,它会寻找与本地已安装Go语言的版本号相对应的标签(tag)或分支(branch)。比如,本机安装Go语言的版本是1.x,那么go get命令会在该代码包的远程仓库中寻找名为“go1”的标签或者分支。如果找到指定的标签或者分支,则将本地代码包的版本切换到此标签或者分支。如果没有找到指定的标签或者分支,则将本地代码包的版本切换到主干的最新版本。
  • go get 更新代码包,更行代码包后,所引用此包的其他代码块使用时都会更新。但是就是不会更新vendor(govendor 代码包管理工具生成的文件夹)目录中的代码。

免责声明:文章转载自《【Go语言系列】go get 命令介绍》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇去除IDEA报黄色/灰色的重复代码的下划波浪线php-fpm优化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Go语言开发环境安装

Go语言(Golang) 由Google 的 Robert Griesemer,Rob Pike 和 Ken Thompson 推出,Go语言具有并发性,可以快速编译机器码,自动垃圾回收,是一种静态强类型、编译型语言。由于Go语言的并发特性,非常适用于Web 服务器、分布式集群计算、云计算、游戏服务端等的开发。在区块链(如以太坊,Ethereum)、容器(...

Go语言正则表达式提取网页文本

为了方便提取,我们会把正则表达式中要提取的数据使用命名方式来书写正则表达式。这个技术在Go语言中如何实现,可以看下面这篇博客: Using the Go Regexp Packagehttp://blog.kamilkisiel.net/blog/2012/07/05/using-the-go-regexp-package/ 简单期间,这里复制其中几个例子...

【Go语言】连接数据库SQLite、MySQL、Oracle

本文目录 1.Go连接SQLite 1_1.SQLite推荐驱动 1_2.SQLite连接示例代码 2.Go连接MySQL 2_1.MySQL推荐驱动 2_2.MySQL连接示例代码 3.Go连接Oracle 3_1.Oracle推荐驱动以及准备事项 3_2.Oracle连接示例代码 说明:go语言连接数据库不像Java那么方便,本文分...

学习Go语言之装饰器模式

一,首先理解装饰器模式:动态的给一个对象增加一些额外的职责,这是在软件设计原则上面,一个功能装饰另一个功能,每个功能遵循同一个接口是这个模式的特征。 二,定义对象接口和装饰抽象类 1 type IDecorate interface { 2 Do() 3 } 4 5 // 装饰器。实现接口,又定义了自己的事件DecorateFun,相...

Go语言基础之数组

Go语言基础之数组 本文主要介绍数组(array)及它的基本使用。 Array(数组) 数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 基本语法: // 定义一个长度为3元素类型为int的数组a var a [3]int 数组定义: var 数组变量名 [元素数量]T 比如:var a...

Go语言基础之单元测试

目录 一、go test工具 二、测试函数 三、测试函数的格式 四、测试函数示例 五、测试组 六、子测试 七、测试覆盖率 八、基准测试 九、基准测试函数格式 十、基准测试示例 十一、性能比较函数 十二、重置时间 十三、并行测试 十四、Setup与TearDown 十五、TestMain 十六、子测试的Setup与Teardown 十七、示例函数 十八、...