go get命令的作用是什么

今天小编给大家分享一下go get命令的作用是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

“go get”命令可以借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装。“go get”命令可以动态获取远程代码包,在使用“go get”命令前,需要安装与远程包匹配的代码管理工具,如Git、SVN、HG等,参数中需要提供一个包名。

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

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

这个命令在内部实际上分成了两步操作:第一步是下载源码包,第二步是执行 go install。

go get命令——一键获取代码、编译并安装

hc@ubt:~$ go get github.com/hyper-carrot/go_lib/logging
go get
go getgo get github.com/hyper-carrot/go_lib/logging
/home/hc/golang/lib:
    bin/
    pkg/
        linux_386/
            github.com/
                hyper-carrot/
                    go_lib/
                        logging.a  
    src/
        github.com/
            hyper-carrot/
                go_lib/
                    logging/
    ...
go getgo get
git clonego get

远程导入路径分析

go get
go getgo get

该命令所支持的VCS的信息如下表:

go get
名称主命令说明
MercurialhgMercurial是一种轻量级分布式版本控制系统,采用Python语言实现,易于学习和使用,扩展性强。
GitgitGit最开始是Linux Torvalds为了帮助管理 Linux 内核开发而开发的一个开源的分布式版本控制软件。但现在已被广泛使用。它是被用来进行有效、高速的各种规模项目的版本管理。
SubversionsvnSubversion是一个版本控制系统,也是第一个将分支概念和功能纳入到版本控制模型的系统。但相对于Git和Mercurial而言,它只算是传统版本控制系统的一员。
BazaarbzrBazaar是一个开源的分布式版本控制系统。但相比而言,用它来作为VCS的项目并不多。
go get
go getgo getgo get-u
go getgo get

表0-3 预置的代码托管站点的信息

名称主域名支持的VCS代码包远程导入路径示例
Bitbucketbitbucket.orgGit, Mercurialbitbucket.org/user/project
bitbucket.org/user/project/sub/directory
GitHubgithub.comGitgithub.com/user/project
github.com/user/project/sub/directory
Google Code Project Hostingcode.google.comGit, Mercurial, Subversioncode.google.com/p/project
code.google.com/p/project/sub/directory
code.google.com/p/project.subrepository
code.google.com/p/project.subrepository/sub/directory
Launchpadlaunchpad.netBazaarlaunchpad.net/project
launchpad.net/project/series
launchpad.net/project/series/sub/directory
launchpad.net/user/project/branch
launchpad.net/user/project/branch/sub/directory
IBM DevOps Serviceshub.jazz.netGithub.jazz.net/git/user/project
hub.jazz.net/git/user/project/sub/directory
go get
go getgo get

自定义代码包远程导入路径

如果你想把你编写的(被托管在不同的代码托管网站上的)代码包的远程导入路径统一起来,或者不希望让你的代码包中夹杂某个代码托管网站的域名,那么你可以选择自定义你的代码包远程导入路径。这种自定义的实现手段叫做“导入注释”。导入注释的写法示例如下:

package analyzer // import "hypermind.cn/talon/analyzer"
analyzeranalyzergo get github.com/hyper-carrot/talon/analyzer
//hypermind.cngithub.com/hyper-carrothypermind.cn
github.com/hyper-carrot/talon/analyzer // 标准的导入路径
hypermind.cn           /talon/analyzer // 导入注释中的导入路径

你想用你自己的域名替换掉标准导入路径中的哪部分由你自己说了算。不过一般情况下,被替换的部分包括代码托管网站的域名以及你在那里的用户ID就可以了。这足以达到我们最开始说的那两个目的。

go get hypermind.cn/talon/analyzerhypermind.cn
<meta name="go-import" content="hypermind.cn/talon git https://github.com/hyper-carrot/talon">
<meta name="go-import" content="import-prefix vcs repo-root">
contentimport-prefixvcsgitrepo-roothypermind.cn/talonhttps://github.com/hyper-carrot/talon
go get hypermind.cn/talon/analyzeranalyzer
hypermind.cn/talon/analyzergithub.com/hyper-carrot/talon/analyzerhypermind.cn/talon/
hc@ubt:~$ go get github.com/hyper-carrot/talon/analyzer
package github.com/hyper-carrot/talon/analyzer: code in directory /home/hc/golang/lib/src/github.com/hyper-carrot/talon/analyzer expects import "hypermind.cn/talon/analyzer"

与自定义的代码包远程导入路径有关的内容我们就介绍到这里。从中我们也可以看出,Go语言为了让使用者的项目与代码托管网站隔离所作出的努力。只要你有自己的网站和一个不错的域名,这就很容易搞定并且非常值得。这会在你的代码包的使用者面前强化你的品牌,而不是某个代码托管网站的。当然,使你的代码包导入路径整齐划一是最直接的好处。

go get

命令特有标记

go getgo buildgo installgo getgo get
go get
-u
-dgo get
hc@ubt:~$ go get -d github.com/hyper-carrot/go_lib/logging

现在,让我们再来看一下Lib工作区的目录结构:

/home/hc/golang/lib:
    bin/
    pkg/
    src/
        github.com/
        hyper-carrot/
        go_lib/
            logging/
    ...
go get-d
-fixfixfixfix
go get-fix
-ugo get-u
hc@ubt:~$ go get -v github.com/hyper-carrot/go_lib/logging
-v-u
hc@ubt:~$ go get -v -u  github.com/hyper-carrot/go_lib/logging
github.com/hyper-carrot/go_lib (download)
-ugo get-x

智能的下载

go getgo get
go get-xgo getgithub.com/hyper-carrot/go_lib
hc@ubt:~$ go get -v -u -x github.com/hyper-carrot/go_lib
github.com/hyper-carrot/go_lib (download)
cd /home/hc/golang/lib/src/github.com/hyper-carrot/go_lib
git fetch
cd /home/hc/golang/lib/src/github.com/hyper-carrot/go_lib
git show-refcd /home/hc/golang/lib/src/github.com/hyper-carrot/go_lib
git checkout origin/masterWORK=/tmp/go-build034263530
go getgit fetchgit show-refgo getgit checkout origin/mastergo get
hc@ubt:~$ cd ~/golang/lib/src/github.com/hyper-carrot/go_lib
hc@ubt:~/golang/lib/src/github.com/hyper-carrot/go_lib$ git tag go1
hc@ubt:~$ go get -v -u -x github.com/hyper-carrot/go_lib
github.com/hyper-carrot/go_lib (download)
cd /home/hc/golang/lib/src/github.com/hyper-carrot/go_lib
git fetch
cd /home/hc/golang/lib/src/github.com/hyper-carrot/go_lib
git show-ref
cd /home/hc/golang/lib/src/github.com/hyper-carrot/go_lib
git show-ref tags/go1 origin/go1
cd /home/hc/golang/lib/src/github.com/hyper-carrot/go_lib
git checkout tags/go1
WORK=/tmp/go-build636338114
git show-refgit show-ref tags/go1 origin/go1go getgo get

以上就是“go get命令的作用是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。