初探go-dep使用小结 2018/6/1
前言
用来干什么
dep 是用来解决 go 的依赖问题的
准备工作
~]# go get -u github.com/golang/dep/cmd/dep
~]# dep help
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.
操作示例
初始化
在代码中 import 了库后,在代码目录先初始化:
~]# dep init -v
~]# ls
app.go Gopkg.lock Gopkg.toml vendor
指定依赖的版本
如果有需要指定版本的,则修改 Gopkg.toml 然后执行:
~]# dep ensure -update -v
关于约束指定的版本,以 Gopkg.toml
的内容示例
[[constraint]]
name = "google.golang.org/grpc"
version = "=v1.3.0"
上述表示使用 1.3.0 这个版本,当然,还有以下表示方法:
"1.3.0" 约束使用 1.3.0 - 2.0.0 之间的最新版 "<=1.3.0" 约束使用最高版本为 1.3.0
详细的解释请参考文档: https://github.com/golang/dep/blob/master/README.md
注意细节: https://github.com/golang/dep/issues/1321
如果有依赖关联了,例如: github.com/coreos/etcd 使用了 grpc 的新版本,则上述指定的 grpc 的依赖将失效,从而拉取到最新的版本 1.7.3(不符合预期,本以为是 1.3.0 这个版本)
查看当前版本
~]# dep status
PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED
github.com/coreos/etcd 3.2.10 v3.2.10 6f48bda 6f48bda 6
google.golang.org/grpc 1.3.0 v1.7.3 401e0e0 d2e1b51 17
k8s.io/kubernetes 1.8.3 v1.8.3 f0efb3c f0efb3c 7
约定版本
显然,,约束的是 1.3.0
然而实际上却使用了 1.7.3
此时,我还是想强制使用该版本,怎么办?(但要注意,因为有其他的组件,例如 etcd 也使用了该库,强制覆盖将导致异常,因而,要根据实际情况来判断)
使用 override
来覆盖
[[override]]
name = "google.golang.org/grpc"
version = "=v1.3.0"
更新
~]# dep ensure -update -v
~]# dep status
PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED
github.com/coreos/etcd 3.2.10 v3.2.10 6f48bda 6f48bda 6
google.golang.org/grpc * (override) v1.3.0 d2e1b51 401e0e0 14
k8s.io/kubernetes 1.8.3 v1.8.3 f0efb3c f0efb3c 7