前言
大家都知道go没有一个自己的包管理平台。社区里go的第三方包托管在各个git托管平台。需要用到包时通过go get 命令工具安装,但这个工具没有版本描述性文件,在go的世界里没有“package.json”这种文件。这个给我们带来直接的影响就是依赖放在外网,而且没有版本约束,这个月下的版本,可能下个月更新了。有道是“工欲善其事,必先利其器”,这个时候我们就需要一个依赖管理工具。
目前依赖工具有很多,如:glide、godep等。今天主要讲是官方出品的dep,注意它和godep不是一个东西。
github地址不同
godep :https://github.com/tools/godep
dep:https://github.com/golang/dep
按照Peter Bourgon博文来说,它们的作者都有相同的人,但是一个是dep是官方版本,godep是第三方工具。
选择dep有什么好处呢?
1、官方出的,不用担心更新维护问题。
2、相对来说,比其他第三方工具兼容问题要好。
还有等用过以后再补。

环境要求
Golang >= 1.9

安装
On other platforms you can use the install.sh script:

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

安装完成,查看DEP版本


$ dep version  

输出

dep:version     : v0.5.0build date  : 2018-07-26git hash    : 224a564go version  : go1.10.3go compiler : gcplatform    : linux/amd64features    : ImportDuringSolve=false

初始化

mkdir $GOPATH/src/test
cd  $GOPATH/src/test
dep init

test目录生成如下文件

├── Gopkg.lock
├── Gopkg.toml
└── vendor

其中

  • Gopkg.lock 是生成的文件,不要手工修改 Gopkg.lock 官方文档。
  • Gopkg.toml 是依赖管理的核心文件,可以生成也可以手动修改,
    一般情况下Gopkg.toml里面只定义直接依赖项,而Gopkg.lock里面除了包含Gopkg.toml中的所有项之外,还包含传递依赖项。比如我们的项目依赖项目A, 而项目A又依赖B、C,那么只有A会包含在Gopkg.toml中,而A、B、C都会定义在Gopkg.lock中。所以Gopkg.lock定义了所有依赖的项目的详细信息(commit ID和packages),使得每次build我们自己的项目时,始终基于确定不变的依赖项。Gopkg.toml 官方文档。
  • vendor目录是 golang1.5 以后依赖管理目录,这个目录的依赖代码是优先加载的,类似 node 的 node_module 目录。
    三个之间的关系

依赖管理

# 依赖管理帮助
dep help ensure
# 添加一条依赖
dep ensure -add github.com/bitly/go-simplejson
# 这里 @= 参数指定的是 某个 tag
dep ensure -add github.com/bitly/go-simplejson@=0.4.3
# 添加后一定记住执行 确保 同步
dep ensure
# 建议使用
dep ensure -v
#  删除没有用到的 package
dep prune -v

参数-v,是为了更好的查看执行过程,建议加上。

依赖更新

dep ensure -update -v

实例
下面通过实例展示dep具体的功能
在目录$GOPATH/src/test下,创建main.go文件

package mainimport ("net/http""os""github.com/gorilla/mux"
)func main() {r := mux.NewRouter()r.Handle("/", http.FileServer(http.Dir(".")))http.ListenAndServe(":"+os.Getenv("PORT"), r)
}

这个时候如果直接执行更新依赖

dep ensure -update -v

你会发现Gopkg.lock没有变化,仅Gopkg.toml和vendor发生了变。
Gopkg.toml

# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.[[projects]]digest = "1:c79fb010be38a59d657c48c6ba1d003a8aa651fa56b579d959d74573b7dff8e1"name = "github.com/gorilla/context"packages = ["."]pruneopts = "UT"revision = "08b5f424b9271eedf6f9f0ce86cb9396ed337a42"version = "v1.1.1"[[projects]]digest = "1:e73f5b0152105f18bc131fba127d9949305c8693f8a762588a82a48f61756f5f"name = "github.com/gorilla/mux"packages = ["."]pruneopts = "UT"revision = "e3702bed27f0d39777b0b37b664b6280e8ef8fbf"version = "v1.6.2"[solve-meta]analyzer-name = "dep"analyzer-version = 1input-imports = ["github.com/gorilla/mux"]solver-name = "gps-cdcl"solver-version = 1

vendor下有一下文件

 $ tree
.
└── github.com└── gorilla├── context│   ├── context.go│   ├── doc.go│   ├── LICENSE│   └── README.md└── mux├── context_gorilla.go├── context_native.go├── doc.go├── ISSUE_TEMPLATE.md├── LICENSE├── middleware.go├── mux.go├── README.md├── regexp.go├── route.go└── test_helpers.go

dep ensure -add 会更新Gopkg.toml和Gopkg.lock并安装依赖项至vendor/下,需要执行dep ensure -add ,以github.com/apodemakeles/ugo/time为例

dep ensure -add github.com/apodemakeles/ugo/time

这时候会报如下信息

"github.com/apodemakeles/ugo/time" is not imported by your project, and has been temporarily added to Gopkg.lock and vendor/.
If you run "dep ensure" again before actually importing it, it will disappear from Gopkg.lock and vendor/.

它说你没有在你的代码中使用这个新的依赖项。现在让我们来看看Gopkg.toml文件。

# Gopkg.toml example
#
# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html
# for detailed Gopkg.toml documentation.
#
# required = ["github.com/user/thing/cmd/thing"]
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
#
# [[constraint]]
#   name = "github.com/user/project"
#   version = "1.0.0"
#
# [[constraint]]
#   name = "github.com/user/project2"
#   branch = "dev"
#   source = "github.com/myfork/project2"
#
# [[override]]
#   name = "github.com/x/y"
#   version = "2.4.0"
#
# [prune]
#   non-go = false
#   go-tests = true
#   unused-packages = true[prune]go-tests = trueunused-packages = true[[constraint]]name = "github.com/apodemakeles/ugo"version = "0.3.0"

这个时候Gopkg.toml文件多了[[constraint]]信息,同时在vendor文件夹和修改.lock文件中安装最新版本。这个时候执行dep ensure 会报错误

Warning: the following project(s) have [[constraint]] stanzas in Gopkg.toml:✗  github.com/apodemakeles/ugoHowever, these projects are not direct dependencies of the current project:
they are not imported in any .go files, nor are they in the 'required' list in
Gopkg.toml. Dep only applies [[constraint]] rules to direct dependencies, so
these rules will have no effect.Either import/require packages from these projects so that they become direct
dependencies, or convert each [[constraint]] to an [[override]] to enforce rules
on these projects, if they happen to be transitive dependencies.

如果不想报错只需import代码中的依赖项,如下所示:

import "github.com/apodemakeles/ugo/time"

然后执行dep ensure。
一般在项目中新增代码,只需执行dep ensure,它将在vendor文件夹和修改.lock文件中安装最新版本。

查看依赖状态

通过执行dep status命令,将列出您的应用程序中使用的版本以及开发人员发布的最新版本。

PROJECT                     CONSTRAINT  VERSION  REVISION  LATEST  PKGS USED
github.com/gorilla/context  v1.1.1      v1.1.1   08b5f42   v1.1.1  1
github.com/gorilla/mux      v1.6.2      v1.6.2   e3702be   v1.6.2  1

删除依赖

修改Gopkg.toml文件相应内容,同时要保证代码中没有引用,再执行dep ensure 或dep ensure -update 均可。
参考
https://golang.github.io/dep/docs/introduction.html
https://jjude.com/go-dep/

go之官方依赖管理工具dep安装和使用相关推荐

  1. golang 官方依赖管理工具 dep 使用和持续集成

    介绍 go dep 依赖管理工具是为应用管理代码的,go get是为GOPATH管理代码的 官方地址 官方说明为啥要统一依赖管理 dep 需要在Go 1.7及更高的版本中使用 安装 本文使用 gola ...

  2. dep指定版本 go_Go依赖管理工具 - dep

    Go依赖管理工具 Go dependency management tool 环境要求 Golang >= 1.9 Dep 目前版本: dep: version : devel build da ...

  3. NPM:nodejs官方包管理工具的简介、安装、使用方法之详细攻略

    NPM:nodejs官方包管理工具的简介.安装.使用方法之详细攻略 目录 NPM之nodejs官方包管理工具的简介 NPM之nodejs官方包管理工具的安装 NPM之nodejs官方包管理工具的使用方 ...

  4. PHP依赖管理工具Composer配置安装及基本使用

    一.介绍 Composer是PHP中的一个依赖管理工具. 它可以让你声明自己项目所依赖的库,然后它将会在项目中为你安装这些库.就像是node的npm和ruby的bundler差不多. 二.window ...

  5. 安装Objective-C的依赖管理工具CocoaPods

    CocoaPods--Swift 与 Objective-C 项目的依赖管理工具,iOS 开发者的必备技能.如果你没有任何 CocoaPods 经历,那么这篇短文就是为你而写.我们将会学到什么是 Co ...

  6. window下PHP依赖管理工具Composer的安装与使用

    一.什么是Composer? Composer 是 PHP 的一个依赖管理工具.我们可以在项目中声明所依赖的外部工具库,Composer 会帮你安装这些依赖的库文件,有了它,我们就可以很轻松的使用一个 ...

  7. linux go vendor目录,Go 包依赖管理工具 —— govendor

    govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...

  8. 小白都能看懂的go语言包管理工具DEP详解

    简介 众所周知GO语言包管理工具百花齐放,前有godep.glide.govendor,后有dep. 今天我们来了解一下"dep",看看它是怎样实现包管理的. dep安装 二进制文 ...

  9. GO 依赖管理工具go Modules

    以前写过一篇关于go管理依赖包工具 dep的文章,当时认为dep将会成为官方依赖工具,现在看来是自己图样图斯内幕破了,正如官方一直提到dep是"official experiment&quo ...

最新文章

  1. TCP通信速率与延时关系
  2. python 数据分析 书籍推荐 知乎_Python 爬取知乎 9674 个问答,揭秘最受欢迎的 98 本书!...
  3. vue使用v-for循环,动态修改element-ui的el-switch
  4. mysql查询出过去一个月_Mysql查询今天、昨天、7天、近30天、本月、上一月 数据...
  5. vue-cli4.x 中 配置允许跨域请求
  6. 使用ExcelPythonHiveSparkSQL进行数据分析开篇-环境搭建攻略!
  7. C/C++笔试题(基础题)
  8. java react_2019JAVA最新课程-React从入门到实战(新)
  9. java switch null,如何在switch中使用null
  10. JavaSocket编程简单入门
  11. 常用的控件样式风格设置(qss)——QtWidgets
  12. Shiro自定义Ream
  13. C Primer Plus第六版第五章运算符,表达式,语句源码
  14. 中南大学上机:PIPI的DNA序列
  15. 《微信小程序——发送模板消息》详细步骤
  16. Qt用SVG图片作为背景图
  17. 视频多少帧时才不卡顿
  18. 4. null 和 undefined区别?
  19. 王老吉做奶茶 是要火还是要凉?
  20. VBA通过一定规律匹配后另存为文件

热门文章

  1. 安卓设备互相投屏_安卓投屏电脑版-安卓投屏下载v7.9.1-IE浏览器中文网站
  2. 戴尔笔记本提示“您已插入低瓦数电源适配器 在bios设置中可以禁用此警告”
  3. 2021-04-06-MSF之永恒之蓝
  4. 读《曾经,我们爱过一个世纪》有感(附原文)
  5. Codeforces Round #708 (Div. 2)B. M-arrays
  6. Python argparse.ArgumentParser的add_argument()用法
  7. 关于阿里云业务数据分析
  8. netstat -ano命令查询端口
  9. android sqlite 分词,sqlite fts3自定义分词器 zz
  10. 名帖148 行书《兰亭八柱帖》第六册:于敏中补戏鸿堂刻柳公权书兰亭诗阙笔册