功能: 用于下载指定的路径包并进行安装。比如:go get github.com/jinzhu/gorm 会下载并安装gorm包。

命令介绍说明:

标记含义
-u用于下载指定的路径包及其依赖包,默认情况下,不会下载本地已经存在的,只会下载本地不存在的代码包。就是口中常说的跟新包 比如:go get -u github.com/jinzhu/gorm。会把最新的 gorm 包下载到你本地
-d此命令仅仅是下载路径包,而不会进行安装。即不会执行 go install 命令
-t让命令程序同时下载并安装指定的代码包中的测试源码文件中依赖的代码包。
-fix让命令程序在下载代码包后先执行修正动作,而后再进行编译和安装。。
-insecure允许命令程序使用非安全的scheme(如HTTP)去下载指定的代码包。如果你用的代码仓库(如公司内部的Gitlab)没有HTTPS支持,可以添加此标记。请在确定安全的情况下使用它。(记得 使用工具 git 时,有个版本就是 http 升级为了https)
-v打印出那些下载的代码包的名字。
-f仅在使用-u标记时才有效。该标记会让命令程序忽略掉对已下载代码包的导入路径的检查。如果下载并安装的代码包所属的项目是你从别人那里Fork过来的,那么这样做就尤为重要了 。
-x打印出整个过程使用了哪些命令。

-fix : 比如,我的代码是一年前1.7 开发的,现在go 版本已经是1.11 了,有些包已经发生了变化,那么我们在使用go get命令的时候可以加入-fix标记。这个标记的作用是在检出代码包之后,先对该代码包中不符合Go语言1.7版本的语言规范的语法进行修正,然后再下载它的依赖包,最后再对它们进行编译和安装。


go get 下载的包保存在哪里呢? 一般他会保存在这个目录:$GOPATH/src/import-path , 若你有多个GOPATH(工作区),则会保存在第一个工作区中。

go get 还有个功能,就是使用它检出或更新代码包之后,它会寻找与本地已安装Go语言的版本号相对应的标签(tag)或分支(branch)。比如,本机安装Go语言的版本是1.x,那么go get命令会在该代码包的远程仓库中寻找名为“go1”的标签或者分支。如果找到指定的标签或者分支,则将本地代码包的版本切换到此标签或者分支。如果没有找到指定的标签或者分支,则将本地代码包的版本切换到主干的最新版本。

go get 更新代码包,更行代码包后,所引用此包的其他代码块使用时都会更新。但是就是不会更新vendor目录中的代码。现在好多公司都用govendor 工具管理代码包,也算是个两两想呼应吧。