go之官方依赖管理工具dep安装和使用
前言
大家都知道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安装和使用相关推荐
- golang 官方依赖管理工具 dep 使用和持续集成
介绍 go dep 依赖管理工具是为应用管理代码的,go get是为GOPATH管理代码的 官方地址 官方说明为啥要统一依赖管理 dep 需要在Go 1.7及更高的版本中使用 安装 本文使用 gola ...
- dep指定版本 go_Go依赖管理工具 - dep
Go依赖管理工具 Go dependency management tool 环境要求 Golang >= 1.9 Dep 目前版本: dep: version : devel build da ...
- NPM:nodejs官方包管理工具的简介、安装、使用方法之详细攻略
NPM:nodejs官方包管理工具的简介.安装.使用方法之详细攻略 目录 NPM之nodejs官方包管理工具的简介 NPM之nodejs官方包管理工具的安装 NPM之nodejs官方包管理工具的使用方 ...
- PHP依赖管理工具Composer配置安装及基本使用
一.介绍 Composer是PHP中的一个依赖管理工具. 它可以让你声明自己项目所依赖的库,然后它将会在项目中为你安装这些库.就像是node的npm和ruby的bundler差不多. 二.window ...
- 安装Objective-C的依赖管理工具CocoaPods
CocoaPods--Swift 与 Objective-C 项目的依赖管理工具,iOS 开发者的必备技能.如果你没有任何 CocoaPods 经历,那么这篇短文就是为你而写.我们将会学到什么是 Co ...
- window下PHP依赖管理工具Composer的安装与使用
一.什么是Composer? Composer 是 PHP 的一个依赖管理工具.我们可以在项目中声明所依赖的外部工具库,Composer 会帮你安装这些依赖的库文件,有了它,我们就可以很轻松的使用一个 ...
- linux go vendor目录,Go 包依赖管理工具 —— govendor
govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...
- 小白都能看懂的go语言包管理工具DEP详解
简介 众所周知GO语言包管理工具百花齐放,前有godep.glide.govendor,后有dep. 今天我们来了解一下"dep",看看它是怎样实现包管理的. dep安装 二进制文 ...
- GO 依赖管理工具go Modules
以前写过一篇关于go管理依赖包工具 dep的文章,当时认为dep将会成为官方依赖工具,现在看来是自己图样图斯内幕破了,正如官方一直提到dep是"official experiment&quo ...
最新文章
- TCP通信速率与延时关系
- python 数据分析 书籍推荐 知乎_Python 爬取知乎 9674 个问答,揭秘最受欢迎的 98 本书!...
- vue使用v-for循环,动态修改element-ui的el-switch
- mysql查询出过去一个月_Mysql查询今天、昨天、7天、近30天、本月、上一月 数据...
- vue-cli4.x 中 配置允许跨域请求
- 使用ExcelPythonHiveSparkSQL进行数据分析开篇-环境搭建攻略!
- C/C++笔试题(基础题)
- java react_2019JAVA最新课程-React从入门到实战(新)
- java switch null,如何在switch中使用null
- JavaSocket编程简单入门
- 常用的控件样式风格设置(qss)——QtWidgets
- Shiro自定义Ream
- C Primer Plus第六版第五章运算符,表达式,语句源码
- 中南大学上机:PIPI的DNA序列
- 《微信小程序——发送模板消息》详细步骤
- Qt用SVG图片作为背景图
- 视频多少帧时才不卡顿
- 4. null 和 undefined区别?
- 王老吉做奶茶 是要火还是要凉?
- VBA通过一定规律匹配后另存为文件
热门文章
- 安卓设备互相投屏_安卓投屏电脑版-安卓投屏下载v7.9.1-IE浏览器中文网站
- 戴尔笔记本提示“您已插入低瓦数电源适配器 在bios设置中可以禁用此警告”
- 2021-04-06-MSF之永恒之蓝
- 读《曾经,我们爱过一个世纪》有感(附原文)
- Codeforces Round #708 (Div. 2)B. M-arrays
- Python argparse.ArgumentParser的add_argument()用法
- 关于阿里云业务数据分析
- netstat -ano命令查询端口
- android sqlite 分词,sqlite fts3自定义分词器 zz
- 名帖148 行书《兰亭八柱帖》第六册:于敏中补戏鸿堂刻柳公权书兰亭诗阙笔册