vendor

vendor 特性

GO15VENDOREXPERIMENT=1
go buildgo run
  • 当前包下的 vendor 目录
  • 向上级目录查找,直到找到 src 下的 vendor 目录
  • 在 GOROOT 目录下查找
  • 在 GOPATH 下面查找依赖包
go env
vendor

vendor 使用建议

mainpackagevendormainpackagevendor

govendor 简介

vendor
$GOPATHvendorvendor/vendor.jsonComposergovendor add/update$GOPATHvendor/*/govendor syncgovendor fetchgovendor migratevendorgovendor

govendor 使用

要求:

$GOPATH/srcset GO15VENDOREXPERIMENT=1

安装

go get -u github.com/kardianos/govendor
govendor$GOPATH/bin
export PATH="$GOPATH/bin:$PATH"

初始化

vendor
govendor init
vendorvendor.jsonvendor.json
{
    "comment": "",
    "ignore": "test",
    "package": [],
    "rootPath": "govendor-example"
}

常用命令

$GOPATHvendor
govendor add +external
$GOPATH
govendor add gopkg.in/yaml.v2
  • 列出代码中所有被引用到的包及其状态
govendor list
 e  github.com/gin-contrib/sse
 e  github.com/gin-gonic/gin
 e  github.com/gin-gonic/gin/binding
 e  github.com/gin-gonic/gin/internal/json
 e  github.com/gin-gonic/gin/render
 e  github.com/golang/protobuf/proto
 e  github.com/mattn/go-isatty
 e  github.com/ugorji/go/codec
 e  gopkg.in/go-playground/validator.v8
 e  gopkg.in/yaml.v2
pl  govendor-example
  m github.com/json-iterator/go
  m golang.org/x/sys/unix
  • 列出一个包被哪些包引用
govendor list -v fmt
 s  fmt
    ├──  e  github.com/gin-contrib/sse
    ├──  e  github.com/gin-gonic/gin
    ├──  e  github.com/gin-gonic/gin/render
    ├──  e  github.com/golang/protobuf/proto
    ├──  e  github.com/ugorji/go/codec
    ├──  e  gopkg.in/go-playground/validator.v8
    ├──  e  gopkg.in/yaml.v2
    └── pl  govendor-example
$GOPATH
govendor fetch golang.org/x/net/context
  • 安装指定版本的包
govendor fetch golang.org/x/net/context@a4bbce9fcae005b22ae5443f6af064d80a6f5a55
govendor fetch golang.org/x/net/context@v1   # Get latest v1.*.* tag or branch.
govendor fetch golang.org/x/net/context@=v1  # Get the tag or branch named "v1".
vendor
govendor fmt +local
  • 只构建编译项目内部的包
govendor install +local
  • 只测试项目内部的测试案例
govendor test +local
vendor
govendor install +vendor,^program
vendor$GOPATH
govendor fetch +out
vendor$GOPATH
govendor update +vendor
$GOPATHvendor
govendor update -uncommitted <updated-package-import-path>
  • Fork 了某个包,但尚未合并,该如何引用到最新的代码包
govendor fetch github.com/normal/pkg::github.com/myfork/pkg
myforknormal
vendor.json
govendor sync

govendor 子命令

govendor COMMAND -hgithub.com/kardianos/govendor/context
vendorvendor.json$GOPATHvendor$GOPATHvendorvendorvendor$GOPATHvendor.jsonvendorvendorgo get$GOPATHvendorgovendor

govendor 状态参数

GOPATHvendorvendorvendor+external +missing
listaddupdateremovefetch

Go modules

普大喜奔的是,从 Go 1.11 版本开始,官方已内置了更为强大的 Go modules 来一统多年来 Go 包依赖管理混乱的局面(Go 官方之前推出的 dep 工具也几乎胎死腹中),并且将在 1.12 版本中正式默认开启。

目前已受到社区的看好和强烈推荐,建议新项目采用 Go modules。