Go依赖包管理工具,3分钟掌握govendor

网上写govendor的博文很多,但从安装到介绍,总看上去有些沉重,下面奉上一篇简单的教程,3分钟入门。git

第1部分 简明教程

2步走,3分钟轻松搞定Go项目的依赖。github

第1步 安装

go get -u github.com/kardianos/govendor

第2步 为项目增长依赖

  1. 进入到项目目录
  2. 使用govendor init命令初始化项目的依赖
  3. 运行govendor fetch命令增长依赖
  4. 打开./vendor/vendor.json查看依赖的包

步骤:shell

cd path/to/project
govendor init
govendor fetch project_url_with_out_http
cat vendor/vendor.json

举个例子:项目awesome依赖github.com/go-clang/bootstrap,过程是这样的:json

cd awesome
govendor init
govendor fetch github.com/go-clang/bootstrap
cat vendor/vendor.json

第2部分 授之以渔

第1个 遇到govendor问题

govendor固然还有其余丰富功能,好比:bootstrap

  1. 依赖的包更新了,怎么更新依赖?
  2. 不依赖这个包, 怎么移除?
  3. 怎么快速查看已经依赖的包?
  4. 怎么知道哪些包过时了,或者丢失了?

你可能想到时候遇到再百度或者Google一下,看看别人的博客或教程,这种方法太弱了,浪费本身的时间,不能专心工做bash

正确的姿式app

  1. 使用govendor --help列出各类命令。
  2. 使用Ctrl+F开启终端搜索,寻找要使用的命令。

好比:ide

  1. 增长包,搜add,会获得add和fetch这2个命令。
  2. 更新包,搜update,会获得update和fetch这2个命令。
  3. 删除包,搜remove,获得remove这个命令。
  4. 查看已经依赖的包,搜list,获得list、status、license命令,而符合你的是list,而且知道了status能列出过时的包。
➜  project_name git:(develop) govendor --help
govendor (v1.0.9): record dependencies and copy into vendor folder
    -govendor-licenses    Show govendor's licenses.
    -version              Show govendor version
    -cpuprofile 'file'    Writes a CPU profile to 'file' for debugging.
    -memprofile 'file'    Writes a heap profile to 'file' for debugging.

Sub-Commands

    init     Create the "vendor" folder and the "vendor.json" file.
    list     List and filter existing dependencies and packages.
    add      Add packages from $GOPATH.
    update   Update packages from $GOPATH.
    remove   Remove packages from the vendor folder.
    status   Lists any packages missing, out-of-date, or modified locally.
    fetch    Add new or update vendor folder packages from remote repository.
    sync     Pull packages into vendor folder from remote repository with revisions
                   from vendor.json file.
    migrate  Move packages from a legacy tool to the vendor folder with metadata.
    get      Like "go get" but copies dependencies into a "vendor" folder.
    license  List discovered licenses for the given status or import paths.
    shell    Run a "shell" to make multiple sub-commands more efficient for large
                 projects.

    go tool commands that are wrapped:
      "+status" package selection may be used with them
    fmt, build, install, clean, test, vet, generate, tool

Status Types

    +local    (l) packages in your project
    +external (e) referenced packages in GOPATH but not in current project
    +vendor   (v) packages in the vendor folder
    +std      (s) packages in the standard library

    +excluded (x) external packages explicitly excluded from vendoring
    +unused   (u) packages in the vendor folder, but unused
    +missing  (m) referenced packages but not found

    +program  (p) package is a main package

    +outside  +external +missing
    +all      +all packages

    Status can be referenced by their initial letters.

Package specifier
    <path>[::<origin>][{/...|/^}][@[<version-spec>]]

Ignoring files with build tags, or excluding packages from being vendored:
    The "vendor.json" file contains a string field named "ignore".
    It may contain a space separated list of build tags to ignore when
    listing and copying files.
    This list may also contain package prefixes (containing a "/", possibly
    as last character) to exclude when copying files in the vendor folder.
    If "foo/" appears in this field, then package "foo" and all its sub-packages
    ("foo/bar", …) will be excluded (but package "bar/foo" will not).
    By default the init command adds the "test" tag to the ignore list.

If using go1.5, ensure GO15VENDOREXPERIMENT=1 is set.

第2个 govendor作了啥

govendor“安装”软件包的时候作了啥呢?其实就是把依赖的包下载到project_dir/vendor目录,这个目录结构和$GOPATH/src下的相同,但若是下载一些比较大的会发现,govendor并不会下载依赖包的全部文件,而是上层的部分文件。想深刻了解govendor?入门后再研究吧。fetch

➜  awesome git:(master) ✗ tree .
.
├── awesome
├── hi.go
└── vendor
    ├── github.com
    │   └── go-clang
    │       └── bootstrap
    │           ├── AUTHORS
    │           ├── CONTRIBUTORS
    │           ├── LICENSE
    │           ├── Makefile
    │           └── README.md
    └── vendor.json
若是这篇文章对你有帮助,请点个赞/喜欢,让我知道个人写做是有价值的,感谢。