一. 简介
依赖管理一直以来都是大型项目开发所面临的一个问题,成熟的编程语言都会有对应的一个甚至多个依赖管理工具。
例如**C++**项目通常会使用Make、Scons等来管理依赖的so,Java项目通常会使用Maven来管理依赖包。Golang项目同样也需要有类似工具来管理对应的依赖包。
dep是Golang官方依赖管理工具,目前只支持Golang 1.9以上的版本。
① go get
Golang最原始的依赖管理是go get ,执行命令后会拉取代码放入src下面,使用go get依赖管理的项目结构如下。假设项目目录 $GOPATH/src/demo
└── bin
└── pkg
└── src
├── demo
│ └── main.go
├── github.com
├── golang.org
└── gopkg.in
go get存在以下几个问题
- go get的代码是作为GOPATH下全局依赖,并且没有版本控制。
- go get管理依赖必须要设置GOPATH=/xx/xx/src,这样才能保证代码可以编译通过。
② dep
dep 依赖管理引入了 vendor 目录作为依赖管理目录,目前 IDE 或 Golang 编辑插件都能很好的支持。
例如Goland依赖包时会优先查找项目根目录下的vendor目录,dep依赖管理的项目结构如下。假设项目目录 $GOPATH/src/projectname
.
├── Gopkg.lock
├── Gopkg.toml
├── main.go
└── vendor
├── github.com
│ ├── gin-contrib
│ ├── gin-gonic
│ ├── golang
│ ├── mattn
│ └── ugorji
├── golang.org
│ └── x
└── gopkg.in
├── go-playground
└── yaml.v2
二. 安装
- 设置环境变量,使用vendor目录
GO15VENDOREXPERIMENT=1 - 安装dep
curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
其它安装方式请参考官网 https://golang.github.io/dep/docs/installation.html - 验证安装,安装成功后输入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 a