[TOC]
概述
注意事项: 由于golang.org在墙外,dep 相关的操作会获取远程项目的状态,在shell执行时,必须确定了你的shell环境已经科学上网了。
go的包管理还没有标准的工具,从go package manager summary出发,了解了
- dep 官方还在实验阶段
- manual 直接操作vendor目录
- Godep 早期的来包管工具,广泛使用
- Glide 晚于Godep功能较全面,除官方的dep应该是最受欢迎的包管理工具
- 其他start较少,暂时没调研
总结:dep赞最高,使用情况未知。Glide & Godep 已经发表声明,尽量将现有的工程迁移到dep,不再提供新功能,还提供迁移文档。趋势是dep将会广泛使用
roadmap
- overview: https://golang.github.io/dep/docs/introduction.html
- glossary: https://golang.github.io/dep/docs/glossary.html
- install: https://golang.github.io/dep/docs/installation.html
- create demo project: https://golang.github.io/dep/docs/new-project.html
- basic usages: dep ensure: https://golang.github.io/dep/docs/daily-dep.html
- 原理:https://golang.github.io/dep/docs/ensure-mechanics.html
dep ensure
dep ensure 保证project处于sync状态,相关的操作会影响Gopkg.lock, Gopkg.toml 和 vendor/ 目录,其中Gopkg.lock和vendor只读不可写。
常用的操作流程
dep ensure -add xxx 增加依赖
增加依赖后,如果不import,再次执行dep ensure时会删除依赖。两种方式增加方式:
- 第一种:
- dep ensure -add github.com/pkg/errors github.com/foo/bar
- dep ensure -add aaa bbb
- 第二种(不要使用,官方说最好不要这么用,就不要用,省得还要解决产生的问题):
- 代码中import相关的package
- dep ensure, 该操作不会增加依赖的meta到Gopkg.toml中
dep ensure -update xxx 更新依赖
- update single package: dep ensure -update github.com/foo/bar
- update all packages: dep ensure -update (不要这么用,影响太大,误操作的可能性很大,逆向的成本很大)
移除依赖
- 删除相关的import语句
- 删除Gopkg.toml中的依赖
- dep ensure
触发dep ensure命令的场景
- 加依赖(第一次增加特定package的依赖),移除依赖(最后一次删除特定package的依赖)
- 代码中import未在vendor中的依赖
- 修改Gopkg.toml
- 无聊,没事也可以运行
原理
相关的概念:
- project src: 代码
- Gopkg.toml: 依赖的metadata
- Gopkg.lock: 依赖图
- vendor/: 依赖的代码