教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 go godep包管理工具详解

go godep包管理工具详解

发布时间:2022-01-12   编辑:jiaochengji.com
教程集为您提供go godep包管理工具详解等资源,欢迎您收藏本站,我们将为您提供最新的go godep包管理工具详解资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg><h2>背景</h2>

Golang 1.5 release版本的发布之前,只能通过设置多个GOPATH的方式来解决这个问题,例如:我两个工程都依赖了Beego,但A工程依赖的是Beego 1.1,B工程依赖的是Beego 1.7,我必须设置两个GOPATH来区分,并且在切换工程的时候GOPATH也得切换,无比痛苦。在Golang 1.5 release 开始支持除了GOROOT和GOPATH之外的依赖管理:vender,官方 wiki 推荐了多种支持这种特性的包管理工具,如:Godep、gv、gvt、glide、govendor和官方的dep等。

<h2>
godep简介</h2>

godep是解决包依赖的管理工具,原理是扫描记录版本控制的信息,并在go命令前加壳来做到依赖管理。godep早期版本并不依赖vendor,所以对go的版本要求很松,go 1.5之前的版本也可以用,只是行为上有所不同。在vendor推出以后,godep也改为使用vendor了。godep 建议在 golang 1.6 以后使用,且godep 依赖 <code>vendor</code> 。
godep的使用者众多,如docker,kubernetes, coreos等go项目很多都是使用godep来管理其依赖,当然原因可能是早期也没的工具可选

<h2>
安装</h2> <pre><code class="lang-bash hljs">go get -u -v github.com/tools/godep </code></pre> <h2>编译和运行</h2>

项目用godep管理后,要编译和运行项目的时候再用go run和go build显然就不行了,因为go命令是直接到GOPATH目录下去找第三方库。 而使用godep下载的依赖库放到Godeps/workspace目录下的;

<pre><code class="lang-bash hljs">godep go run main.go godep go build godep go <span class="token function">install</span> godep go <span class="token function">test</span> </code></pre>

godep中的go命令,就是将原先的go命令加了一层壳,执行godep go的时候,会将当前项目的workspace目录加入GOPATH变量中;

<h2>
godep save 检出依赖</h2>

godep save将项目中使用到的第三方库复制到项目的Godeps目录下。

godep save 会自动扫描当前目录所属包中import的所有外部依赖库(非系统库),并查看其是否属于某个代码管理工具(比如git,hg)。若是,则把此库获取路径和当前对应的revision(commit id)记录到当前目录Godeps下的Godeps.json,同时,把不含代码管理信息(如.git目录)的代码拷贝到Godeps/_workspace/src下,用于后继godep go build等命令执行时固定查找依赖包的路径。

因此,godep save能否成功执行需要有两个要素: 当前或者需扫描的包均能够编译成功:因此所有依赖包事先都应该已经或go get或手工操作保存到当前GOPATH路径下 依赖包必须使用了某个代码管理工具(如git,hg):这是因为godep需要记录revision

<h2>
godep restore</h2>

如果下载的项目中只有Godeps.json文件,而没有包含第三库则可以使用godep restore这个命令将所有的依赖库下来下来到GOPATH的src中。

<pre><code class="lang-bash hljs">godep restore </code></pre>

godep restore执行时,godep会按照Godeps/Godeps.json内列表,依次执行go get -d -v 来下载对应依赖包到GOPATH路径下,因此,如果某个原先的依赖包保存路径(GOPATH下的相对路径)与下载url路径不一致,比如kuberbetes在github上路径是github.com/kubernetes,而代码内import则是k8s.io,则会导致无法下载成功,也就是说godep restore不成功。这种只能手动,比如手动创建$GOPATH/k8s.io目录,然后git clone。

<h2>
golang自带包管理工具</h2>

自带工具:go get
go get可以将依赖的第三方库下载本GOPATH目录,在代码中直接import相应的代码库就可以了。 与godep相比,如果项目引用的第三方库没有列入到项目里面,安装项目时,针对第三方库需要使用go get一个个下载,比较麻烦;

注:使用godep restore可能导致部分库无法下载下来;编译会报错: cmd/decode.go:16:2: cannot find package “github.com/CodisLabs/redis-port/pkg/libs/atomic2” in any of:

此时针对报错的特定库再go get一般都能下载:

<pre><code class="lang-bash hljs"> go get github.com/CodisLabs/redis-port/pkg/libs/atomic2 </code></pre>

godep支持的命令

<pre><code class="lang-bash hljs">save list and copy dependencies into Godeps go run the go tool with saved dependencies get download and <span class="token function">install</span> packages with specified dependencies path print GOPATH <span class="token keyword">for</span> dependency code restore check out listed dependency versions <span class="token keyword">in</span> GOPATH update update selected packages or the go version <span class="token function">diff</span> shows the <span class="token function">diff</span> between current and previously saved <span class="token keyword">set</span> of dependencies version show version info </code></pre> 到此这篇关于“go godep包管理工具详解”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
go godep包管理工具详解
使用 VS Code 快速搭建 Golang 开发环境
Golang笔记:包管理机制
Go 1.5之前的多种包管理机制简介(
golang编译之vendor机制
Golang包管理工具govendor的使用
go 类型 value 不支持索引_Go语言基础(十四)
想系统学习GO语言(Golang
go 函数末尾缺少返回值_王垠:Go语言野心勃勃,实际情况又如何
CentOS 7下安装nsq

[关闭]
~ ~