go依賴管理-govendor

Golang 官方並無推薦最佳的包管理方案。到了1.5版本時代,官方引入包管理的設計,加了 vendor 目錄來支持本地包管理依賴。官方 wiki 推薦了多種支持這種特性的包管理工具,如:Godep、gv、gvt、glide、govendor等。git

下面簡要介紹一個我在項目中用到的 -- govendor
該工具將項目依賴的外部包拷貝到項目下的 vendor 目錄下,並經過 vendor.json 文件來記錄依賴包的版本,方便用戶使用相對穩定的依賴。
對於 govendor 來講,依賴包主要有如下多種類型:github

狀態 縮寫狀態 含義
+local l 本地包,即項目自身的包組織
+external e 外部包,即被 $GOPATH 管理,但不在 vendor 目錄下
+vendor v 已被 govendor 管理,即在 vendor 目錄下
+std s 標準庫中的包
+unused u 未使用的包,即包在 vendor 目錄下,但項目並無用到
+missing m 代碼引用了依賴包,但該包並無找到
+program p 主程序包,意味着能夠編譯爲執行文件
+outside 外部包和缺失的包
+all 全部的包

Installation

go get -u github.com/kardianos/govendor

命令行執行 govendor,若出現如下信息,則說明安裝成功。golang

➜  ~ govendor
govendor (v1.0.8): record dependencies and copy into vendor folder
    -govendor-licenses    Show govendor's licenses.
    -version              Show govendor version
...
...

Warning: 須要把 $GOPATH/bin/ 加到 PATH 中。shell

Quickstart

# Setup your project.
cd "my project in GOPATH"
# 初始化 vendor 目錄, project 下出現 vendor 目錄
govendor init

# Add existing GOPATH files to vendor.
govendor add +external

# View your work.
govendor list

# Look at what is using a package
govendor list -v fmt

# Specify a specific version or revision to fetch
govendor fetch golang.org/x/net/context@a4bbce9fcae005b22ae5443f6af064d80a6f5a55

# Get latest v1.*.* tag or branch.
govendor fetch golang.org/x/net/context@v1   

# Get the tag or branch named "v1".
govendor fetch golang.org/x/net/context@=v1  

# Update a package to latest, given any prior version constraint
govendor fetch golang.org/x/net/context

# Format your repository only
govendor fmt +local

# Build everything in your repository only
govendor install +local

# Test your repository only
govendor test +local

Sub-commands

init     建立 vendor 文件夾和 vendor.json 文件
list     列出已經存在的依賴包
add      從 $GOPATH 中添加依賴包,會加到 vendor.json
update   從 $GOPATH 升級依賴包
remove   從 vendor 文件夾刪除依賴
status   列出本地丟失的、過時的和修改的package
fetch   從遠端庫增長新的,或者更新 vendor 文件中的依賴包
sync     Pull packages into vendor folder from remote repository with revisions
migrate  Move packages from a legacy tool to the vendor folder with metadata.
get     相似 go get,可是會把依賴包拷貝到 vendor 目錄
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

warningjson

  • The project must be within a $GOPATH/src.app

  • If using go1.5, ensure you set GO15VENDOREXPERIMENT=1.ide

參考

govendor github
go 依賴管理利器 -- govendor工具

相關文章
相關標籤/搜索