Go依賴包管理工具,3分鐘掌握govendor
網上寫govendor的博文不少,但從安裝到介紹,總看上去有些沉重 ,下面奉上一篇簡單的教程,3分鐘入門。
第1部分 簡明教程
2步走,3分鐘輕鬆搞定Go專案的依賴。
第1步 安裝
go get -u github.com/kardianos/govendor
第2步 為專案增加依賴
govendor init govendor fetch ./vendor/vendor.json
步驟:
cd path/to/project govendor init govendor fetch project_url_with_out_http cat vendor/vendor.json
舉個例子:專案awesome依賴github.com/go-clang/bootstrap
,過程是這樣的:
cd awesome govendor init govendor fetch github.com/go-clang/bootstrap cat vendor/vendor.json
第2部分 授之以漁
第1個 遇到govendor問題
govendor當然還有其他豐富功能,比如:
- 依賴的包更新了,怎麼更新依賴?
- 不依賴這個包, 怎麼移除?
- 怎麼快速檢視已經依賴的包?
- 怎麼知道哪些包過期了,或者丟失了?
你可能想到時候遇到再百度或者Google 一下,看看別人的部落格或教程,這種方法太弱了,浪費自己的時間,不能專心工作 。
正確的姿勢:
govendor --help
比如:
- 增加包,搜add,會得到add和fetch這2個命令。
- 更新包,搜update,會得到update和fetch這2個命令。
- 刪除包,搜remove,得到remove這個命令。
- 檢視已經依賴的包,搜list,得到list、status、license命令,而符合你的是list,並且知道了status能列出過期的包。
➜project_name git:(develop) govendor --help govendor (v1.0.9): record dependencies and copy into vendor folder -govendor-licensesShow govendor's licenses. -versionShow govendor version -cpuprofile 'file'Writes a CPU profile to 'file' for debugging. -memprofile 'file'Writes a heap profile to 'file' for debugging. Sub-Commands initCreate the "vendor" folder and the "vendor.json" file. listList and filter existing dependencies and packages. addAdd packages from $GOPATH. updateUpdate packages from $GOPATH. removeRemove packages from the vendor folder. statusLists any packages missing, out-of-date, or modified locally. fetchAdd new or update vendor folder packages from remote repository. syncPull packages into vendor folder from remote repository with revisions from vendor.json file. migrateMove packages from a legacy tool to the vendor folder with metadata. getLike "go get" but copies dependencies into a "vendor" folder. licenseList discovered licenses for the given status or import paths. shellRun 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?入門後再研究吧。
➜awesome git:(master) ✗ tree . . ├── awesome ├── hi.go └── vendor ├── github.com │└── go-clang │└── bootstrap │├── AUTHORS │├── CONTRIBUTORS │├── LICENSE │├── Makefile │└── README.md └── vendor.json
如果這篇文章對你有幫助,請點個贊/喜歡,讓我知道我的寫作是有價值的,感謝。