Go包管理工具dep
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
不指定符号的话,默认为^符号。
有了包管理工具之后,好处还是挺多:
- 帮你锁住依赖版本,防止第三方包升级导致代码不兼容;
- 将项目的依赖都放在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的更多相关文章
- Go语言包管理工具dep
什么是dep? dep和go,在一定程度上相当于maven之于Java,composer之于PHP,dep是go语言官方的一个包管理工具. 相比较go get而言,dep可以直接给引入的第三方包一个专 ...
- Golang学习--包管理工具glide
上一篇文章中我们已经成功的运行了go的代码,这是我们迈出的最基础的一步. 一个项目通常会依赖很多外部的库,当依赖的库比较多的时候,手工管理就会比较麻烦,这个时候就需要包管理工具出场了,帮你管理好所有依 ...
- glide包管理工具
上一篇文章中我们已经成功的运行了go的代码,这是我们迈出的最基础的一步. 一个项目通常会依赖很多外部的库,当依赖的库比较多的时候,手工管理就会比较麻烦,这个时候就需要包管理工具出场了,帮你管理好所有依 ...
- Go的包管理工具(一)
在前面转载了系列文章:Golang 需要避免踩的 50 个坑,总得来说阅读量都挺大.今天这篇文章,咱们一起聊聊Go的依赖包管理工具. 背景 每一门语言都有其依赖的生态,当我们使用Java语言的时候,使 ...
- Python黑帽编程1.3 Python运行时与包管理工具
Python黑帽编程1.3 Python运行时与包管理工具 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...
- 包管理工具Carthage使用
iOS项目中第三方开源库的工具有Cocoapods和Carthage,swift官方出了一个包管理工具SPM(Swift Package Manager). 首先,大体讲一下Cocoapods和Car ...
- Node包管理工具
Node包管理工具 只是简单的介绍一些工具的使用,有利于开发过程.除了介绍Node包管理工具,还介绍了前端打包工具,前端模块管理工具 Node包管理工具: --npm --cnpm ...
- godep 包管理工具
godep是解决包依赖的管理工具 安装 go get github.com/tools/godep 成功安装后,在GOPATH的bin目录下会有一个godep可执行的二进制文件,后面执行的命令都是用这 ...
- 【转载】Python的包管理工具Pip
接触了Ruby,发现它有个包管理工具RubyGem很好用,并且有很完备的文档系统http://rdoc.info 发现Python下也有同样的工具,包括easy_install和Pip.不过,我没有细 ...
随机推荐
- kuangbin专题 专题一 简单搜索 非常可乐 HDU - 1495
题目链接:https://vjudge.net/problem/HDU-1495 题意:有两个空杯(分别是N升和M升)和一罐满的可乐S升,S = N + M,三个容器可以互相倾倒,如果A倒入B,只有两 ...
- JavaScript 之迭代方法
前言:关于 JS 中为数组定义的迭代方法,我最开始是在<JavaScript高级程序设计>中学习的,然后...我并没有看懂,后来翻阅各个大佬的博客,稍微理解了那么一丢丢.以下就是我的一点见 ...
- 12306抢票系统——ER图及数据表
12306自动抢票系统——ER图及数据表 1. 抢票系统ER图 数据表 2.抢票系统数据结构表 (1)列车表 Trains table 字段名 数据类型 说明 是否为主键 Train_id strin ...
- Python 3.5学习笔记(第一章)
本章内容: 1.安装python 3.5 和 PyCharm 社区版 2.第一个python程序 3.变量 4.字符编码 5.用户输入 6.字符串格式化输出 7.if .else .elif 8.fo ...
- LaTeX大全
1.指数和下标可以用^和_后加相应字符来实现.比如: 2.平方根(square root)的输入命令为:\sqrt,n 次方根相应地为: \sqrt[n].方根符号的大小由LATEX自动加以调整.也可 ...
- 个人永久性免费-Excel催化剂功能第35波-Excel版最全单位换算,从此不用到处百度找答案
全球化的今天,相信我们经常可以有机会接触到外国的产品,同时我们也有许多产品出口到外国,国与国之间的度量单位不一,经常需要做一些转换运算,一般网页提供这样的转换,但没有什么比在Excel上计算来得更为方 ...
- MySql的数据库优化到底优啥了都??(2)
嘟嘟在写此篇文章之前心里先默念(简单,通俗,工整)*10 吟唱完了,进入正题 3.Memory存储引擎 除了存放一个表结构相关信息的.frm文件在磁盘上,其他数据都存储在内存中.说白点哪天你数据库死机 ...
- [leetcode] 55. Jump Game (Medium)
原题 题目意思即 每一格代表你当前最多能再往后跳几次,从第一格开始,如果能跳到最后一格返回true,反之为false. 思路:用一个下标记录当前最多能跳到哪一格,遍历一遍 --> 如果当前格子不 ...
- 图像相似度中的Hash算法
度量两张图片的相似度有许多算法,本文讲介绍工程领域中最常用的图片相似度算法之一--Hash算法.Hash算法准确的说有三种,分别为平均哈希算法(aHash).感知哈希算法你(pHash) ...
- 或许是你应该了解的一些 ASP.NET Core Web API 使用小技巧
一.前言 在目前的软件开发的潮流中,不管是前后端分离还是服务化改造,后端更多的是通过构建 API 接口服务从而为 web.app.desktop 等各种客户端提供业务支持,如何构建一个符合规范.容易理 ...