第三方依赖管理很多,虽然很好用,但是很少可以兼容的,结果--乱;
官方的包管理为了增加社区的凝聚力,保持Go开箱即用的简单特性,不需要大家再安装各种第三方工具了,而且第三方工具都会过来兼容官方版的;
还有一个官话,为了go更好的发展;
下面进入教程。
dep是一个原型依赖管理工具,需要在Go 1.7及更高的版本中使用,说明第三方工具近期还是有市场的。
PS:本博客的<code>dep</code>基于v0.3。
等到<code>dep</code>正式集成到Golang中时候,也许是Golang 1.10 ,广大吃瓜群众就可以直接使用<code>go dep</code>命令。现在还是需要自己安装的。
有一个很重要的选项<code>ensure</code>中文含义是<code>确保;保证;担保</code>,作者想传达的意思是<code>确保所有本地状态-代码树、清单、锁和供应商彼此同步</code>。
看到这个说明已经安装好了。
老规矩,篇幅有限,我只介绍经常使用到的。 先进入在GOPATH的一个项目中。
大家发现了,应用foordep目录下出现了两个文件(Gopkg.lock、Gopkg.toml)和一个目录(vendor)。 它们是什么关系呢?

所以出现<code>Gopkg.toml and Gopkg.lock are out of sync.</code>时候最好执行一下<code>dep ensure</code>。
下面看看它们的内容。
我们写一个<code>Gopkg.toml</code>看看效果。
但是怎么样执行?可以执行如下命令寻找帮助:
执行一下
错误了,这是因为foordep目录下没有任何的go代码,只能加上一个看看。
再来试试看。
看看Gopkg.lock的内容。
现在需要解析json,我们试试使用命令行的方式导入<code>github.com/bitly/go-simplejson</code>包。
可以发现多了<code>github.com/bitly/go-simplejson</code>,但是<code>Gopkg.toml</code>并没有任何改变。 注意:执行<code>dep ensure -add</code>时候报错
还可以指定依赖的版本:
是因为<code>Gopkg.toml</code>和<code>Gopkg.lock</code>不同步了,需要重新执行一下<code>dep ensure</code>即可。 重新整理一下<code>Gopkg.toml</code>。
<code>Gopkg.toml</code>的<code>version</code>规则: <code>~</code>和<code>=</code>是<code>version</code>使用的操作符规则,如果仅仅是指定<code>version = "1.8.0"</code>,那么<code>dep</code>会自动加上<code>^</code>,表示最左边的非零位的版本<code>加一</code>。
如果执行<code>dep ensure</code>时候出现
说明配置写错了,需要看看<code>Gopkg.toml</code>文件中是不是同时配置了<code>version</code>、<code>branch</code>和<code>revision</code>。
我们现在尝试着把<code>foordep</code>目录情况就留下<code>main.go</code>
执行<code>dep ensure</code> 为了更好地看到过程,加上参数<code>-v</code>。
此时再查看<code>Gopkg.toml</code>和<code>Gopkg.lock</code>文件:
与<code>glide</code>一样,具有<code>自举</code>功能,不知道这个名词用得对不对。<code>dep</code>会自动根据代码生成<code>Gopkg.toml</code>和<code>Gopkg.lock</code>配置文件。
PS:但是不建议使用,因为其拉取的依赖包都是最新的,可能出现不兼容,再者我国是一个<code>被墙</code>的地方。
看到这里时候很多人都会有疑问?<code>dep</code>的依赖包每一次都是拉取新的还是优先使用本地cache呢?可以肯定的是 <code>dep</code>也是有本地缓存的,大家可以打开<code>$GOPATH/pkg/dep/</code>看看,是不是存在呢!
下面我们做两个测试看看。
环境准备,将原来的cache和vendor清空,别遗漏了<code>$GOPATH/src</code>中的<code>github.com/bitly/go-simplejson</code>。
执行<code>dep init -gopath -v</code>查看初始化过程。
日志显示,<code>dep</code>首先从$GOPATH查找<code>github.com/bitly/go-simplejson</code>,因为没有找到才从网络下载。
环境准备,将原来的cache和vendor清空,注意<code>$GOPATH/src</code>中的<code>github.com/bitly/go-simplejson</code>存在。
可以看到<code>github.com/bitly/go-simplejson</code>是优先从<code>$GOPATH</code>获取的。 好处我个人认为有两个:
节省时间;
本地类库的稳定性和兼容性已经经过用户验证了。
在<code>dep v0.1</code>时候还不需要手动加上<code>-gopath</code>选项,<code>dep</code>工具会自动判断,但是<code>dep v0.3</code>后如果没有加上<code>-gopath</code>那么默认就是从网络下载。
现在修改<code>foordep</code>项目的<code>Gopkg.toml</code>内容为:
看到了这里,那么对<code>dep</code>已经可以进行基本的使用了,不过目前而言,<code>dep</code>还不够稳定,谁也不知道后续会怎么样更改,尝鲜可以,个人还不建议使用在线上。 如果大家喜欢这篇博文请<code>点赞</code>或者<code>留言</code>,有不同见解的也请<code>留言</code>讨论。
本文转自 梦朝思夕 51CTO博客,原文链接:http://blog.51cto.com/qiangmzsx/1954603