dep是一个golang依赖管理工具,需要在Go 1.7及更高的版本中使用。

1. 安装

安装dep工具的方式有很多种,如果是mac电脑的话,只需要如下命令:

brew install dep

对于Linux和类Unix系统而言,我们还可以使用如下方式安装dep:

curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh

或者直接使用源码安装。

而对于windows电脑,可以使用命令行:

go get -u github.com/golang/dep/cmd/dep

会自动下载到go_path/bin/目录下,你需要将go_path/bin 加入到环境变量中。

如果这种方式下载不下来,你也可以手动下载:点击这里,挑选适合你的版本,然后修改文件名为dep.exe放入go_path/bin/目录下。

2. 使用

安装完毕再命令行下敲入dep命令:

$ dep
Dep is a tool for managing dependencies for Go projects Usage: "dep [command]" Commands: init Set up a new Go project, or migrate an existing one
status Report the status of the project's dependencies
ensure Ensure a dependency is safely vendored in the project
prune Pruning is now performed automatically by dep ensure.
version Show the dep version information Examples:
dep init set up a new project
dep ensure install the project's dependencies
dep ensure -update update the locked versions of all dependencies
dep ensure -add github.com/pkg/errors add a dependency to the project Use "dep help [command]" for more information about a command.

如上:

init命令用来初始化项目;

status命令用来查看当前项目的依赖状态;

ensure命令用来同步依赖包

3. 初始化

切换到你的工程目录下:

cd $GOPATH/src/goProject

假设项目现在是空的,什么也没有,进行初始化:

dep init -v

注意:因为墙的原因,,,不一定我们能成功的拉下来依赖,使用dep init 尽量带上-v:

 -v            enable verbose logging (default: false)

如果半分钟没响应就ctrl+c中断,就可以看到fail的原因,dep遇到一些错误不会立马报错(特别是网络原因) 。

执行成功之后会生成两个文件 Gopkg.lock、Gopkg.toml和一个文件夹vendor

Gopkg.toml文件记录着current project依赖项project的约束。

Gopkg.toml参数解释:

[[constraint]]: 这个约束主要体现在到底要采用目标project的某个tag的版本(version),还是某个branch,或者是某个revision,这三个对于一个constraint只能选一个。

[[override]]:有时项目依赖比较复杂,经常会遇到依赖冲突导致 dep ensure 命令无法执行成功,这个时候使用 override 消除单个依赖关系上多个不可调和的constraint声明之间的分歧

[[required]]:列出了必须包含在Gopkg.lock中的一组包

[[ignored]]:列出dep静态分析源代码时忽略的一组包

[[prune]]:prune为依赖关系定义全局和每个项目的prune选项。 这些选项决定写入vendor/时丢弃哪些文件

  • unused-packages:修剪掉来自于目录中,但是没有出现在包导入图中的文件
  • non-go:修剪掉非.go文件
  • go-tests:修剪掉Go的测试文件

Gopkg.lock文件是工具生成的,你不用手工编辑

vendor文件里面存放current project的远程依赖的源代码

当需要指定目标project使用哪一个version时,可以在Gopkg.toml中添加。如,需要指定alice版本为0.8.4,在Gopkg.toml中添加:

[[constraint]]
name = "github.com/golang/dep"
version = "=0.8.4"

然后执行

dep ensure -update "github.com/golang/dep

在指定version的时候,如果指定semantic version,可选的符号有

  • =: 只选择对应version
  • >或<: 大于(或小于)对应版本号
  • >=或<=: 大于等于(或小于等于)对应版本号
  • ~: ~1.2.3表示 >=1.2.3,<1.3.0
  • ^: ^1.2.3表示 >1.2.3,<2.0.0

不指定符号的话,默认为^符号。

有了包管理工具之后,好处还是挺多:

  1. 帮你锁住依赖版本,防止第三方包升级导致代码不兼容;
  2. 将项目的依赖都放在vendor下,就不用依赖gopath下的公共包了;

4. 添加依赖

依赖管理帮助

`dep help ensure`

添加一条依赖

`dep ensure -add github.com``/bitly/go-simplejson`

一次性添加多条依赖

`dep ensure -add github.com``/pkg/errors` `github.com``/bitly/go-simplejson`

添加依赖指定依赖版本

`dep ensure -add github.com``/bitly/go-simplejson``@=0.4.3`

添加后记住执行dep ensure确保同步

`dep ensure -``v`

如果执行dep ensure出错,看下Gopkg.toml文件中是否同时配置了version,branch和revision。

Go包管理工具dep的更多相关文章

  1. Go语言包管理工具dep

    什么是dep? dep和go,在一定程度上相当于maven之于Java,composer之于PHP,dep是go语言官方的一个包管理工具. 相比较go get而言,dep可以直接给引入的第三方包一个专 ...

  2. Golang学习--包管理工具glide

    上一篇文章中我们已经成功的运行了go的代码,这是我们迈出的最基础的一步. 一个项目通常会依赖很多外部的库,当依赖的库比较多的时候,手工管理就会比较麻烦,这个时候就需要包管理工具出场了,帮你管理好所有依 ...

  3. glide包管理工具

    上一篇文章中我们已经成功的运行了go的代码,这是我们迈出的最基础的一步. 一个项目通常会依赖很多外部的库,当依赖的库比较多的时候,手工管理就会比较麻烦,这个时候就需要包管理工具出场了,帮你管理好所有依 ...

  4. Go的包管理工具(一)

    在前面转载了系列文章:Golang 需要避免踩的 50 个坑,总得来说阅读量都挺大.今天这篇文章,咱们一起聊聊Go的依赖包管理工具. 背景 每一门语言都有其依赖的生态,当我们使用Java语言的时候,使 ...

  5. Python黑帽编程1.3 Python运行时与包管理工具

    Python黑帽编程1.3  Python运行时与包管理工具 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...

  6. 包管理工具Carthage使用

    iOS项目中第三方开源库的工具有Cocoapods和Carthage,swift官方出了一个包管理工具SPM(Swift Package Manager). 首先,大体讲一下Cocoapods和Car ...

  7. Node包管理工具

    Node包管理工具 只是简单的介绍一些工具的使用,有利于开发过程.除了介绍Node包管理工具,还介绍了前端打包工具,前端模块管理工具 Node包管理工具:    --npm    --cnpm    ...

  8. godep 包管理工具

    godep是解决包依赖的管理工具 安装 go get github.com/tools/godep 成功安装后,在GOPATH的bin目录下会有一个godep可执行的二进制文件,后面执行的命令都是用这 ...

  9. 【转载】Python的包管理工具Pip

    接触了Ruby,发现它有个包管理工具RubyGem很好用,并且有很完备的文档系统http://rdoc.info 发现Python下也有同样的工具,包括easy_install和Pip.不过,我没有细 ...

随机推荐

  1. 深入理解Java虚拟机笔记——垃圾收集器与内存分配策略

    目录 判断对象是否死亡 引用计数器算法 可达性分析算法 各种引用 回收方法区 垃圾收集算法 标记-清除算法 复制算法 标记-整理算法 分代收集算法 HotSpot算法实现 枚举根节点 GC停顿(Sto ...

  2. Python爬虫入门:爬取pixiv

    终于想开始爬自己想爬的网站了.于是就试着爬P站试试手. 我爬的图的目标网址是: http://www.pixiv.net/search.php?word=%E5%9B%9B%E6%9C%88%E3%8 ...

  3. js常用设计模式实现(一)单例模式

    前言 什么是设计模式 设计模式是一种能够被反复使用,符合面向对象特性的代码设计经验的总结,合理的使用设计模式能够让你得代码更容易维护和可靠 设计模式的类型共分为创建型模式,结构型模式,行为型模式三种 ...

  4. Effective Java第三版(一) ——用静态工厂代替构造器

    此文做为<Effective Java>系列的第一篇,所以有必要大概说下此书的特点,当然很多人可能都看过,毕竟是有着Java四大名著之一的大名在外,不过总会有萌新不了解,例如我!<E ...

  5. Java学习笔记之---static

    Java学习笔记之---static static不能修饰类,局部变量 (一)静态成员的特征 static+属性  静态属性 无论实例化出来多少个对象,都会共用同一块静态空间,类对象共享 静态成员从第 ...

  6. [开源]OSharpNS 步步为营系列 - 3. 添加业务服务层

    什么是OSharp OSharpNS全称OSharp Framework with .NetStandard2.0,是一个基于.NetStandard2.0开发的一个.NetCore快速开发框架.这个 ...

  7. springcloud启动多个实例

    1. 场景描述 springcloud微服务,部署一般需要多台服务器配合,开发测试过程中,也需要启动多个实例来进行测试与验证. 2. 问题解决 在idea下,只需要配置下就能启动多个实例,本案例采用在 ...

  8. 零基础ASP.NET Core WebAPI团队协作开发

    零基础ASP.NET Core WebAPI团队协作开发 相信大家对“前后端分离”和“微服务”这两个词应该是耳熟能详了.网上也有很多介绍这方面的文章,写的都很好.我这里提这个是因为接下来我要分享的内容 ...

  9. Bzoj 3131 [Sdoi2013]淘金 题解

    3131: [Sdoi2013]淘金 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 733  Solved: 363[Submit][Status][ ...

  10. java学习笔记系列整理说明

    java学习笔记系列整理说明 ​ 陆陆续续也巩固学习java基础也有一段时间了,这里整理了一些我认为比较的重要的知识点,供自己或者读者以后回顾和学习.这是一个学习笔记系列,有自己的整理重新撰写的部分, ...