目錄
一 、govendor簡介
- vendor是go的一個目錄形式的包管理工具,而govendor結合了vendor這機制,擴展了功能:
- 支持分析源碼依賴包
- 支持指定包版本,使用vendor/vendor.json類似maven pom.xml
- 支持複製%GOPATH%/src的包到項目
- 支持vendor包下的包進行增刪改查等
- vendor仍然需要GOPATH設定下來實現,但是慢慢脫離了GOPATH/src的依賴查找,import優先查找
- 當前GOPATH/項目根/vendor目錄
- GOROOT/src
- GOPATH/src
- go1.5 版本提供 vendor 特性,需手動設置環境變量 GO15VENDOREXPERIMENT=1。go1.6+自動開啓
- github-govendor
二、govendor命令簡介
命令 | 描述 | 功能 |
init | Create the "vendor" folder and the "vendor.json" file. | 創建vendor目錄以及(空)vendor.json |
list | List and filter existing dependencies and packages. | 查詢當前已存在依賴 |
add | Add packages from $GOPATH. | 從GOPATH拷貝依賴到vendor目錄 |
update | Update packages from $GOPATH. | 從GOPATH更新依賴到vendor目錄 |
remove | Remove packages from the vendor folder. | 從vendor目錄移除依賴 |
status | Lists any packages missing, out-of-date, or modified locally. | 查看依賴是否丟失,過期或者修改的依賴 |
fetch | Add new or update vendor folder packages from remote repository. | 遠程添加或者更新依賴到vendor目錄 |
sync | Pull packages into vendor folder from remote repository with revisions from vendor.json file. | 遠程同步vendor.json所有依賴到vendor目錄 |
migrate | Move packages from a legacy tool to the vendor folder with metadata. | 合併其他vendor目錄到本vendor目錄下 |
get | Like "go get" but copies dependencies into a "vendor" folder. | 遠程直接下載依賴到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. | 用於大型項目中子命令支持 |
命令 | 描述 | 功能 |
+local | (l) packages in your project | 限定在本項目 |
+external | (e) referenced packages in GOPATH but not in current project | 限定在GOPATH |
+vendor | (v) packages in the vendor folder | 限定在vendor |
+std | (s) packages in the standard library | 限定在GOROOT |
+excluded | (x) external packages explicitly excluded from vendoring | 限定vendor排除的 |
+unused | (u) packages in the vendor folder, but unused | 限定vendor未使用 |
+missing | (m) referenced packages but not found | 限定vendor缺失的 |
+program | (p) package is a main package | 限定main包下的 |
+outside | +external +missing | 組合vendor缺失在GOPATH的 |
+all | +all packages | 所有包 |
三、govendor安裝配置
step0:環境準備
https://blog.csdn.net/qq_22211217/article/details/101116308
vendor基於GOPATH,所有項目必須在GOPATH/src下
step1:安裝下載govendor
go get -u github.com/kardianos/govendor
ps:go get 相當於git clone與 go install
其執行文件在GOPATH/bin/govendor.exe
等效:
使用git clone 將 github.com/kardianos/govendor下載到GOPATH/src下
再進入GOPATH/src/github.com/kardianos/govendor 使用go install main.go
step2:使用govendor
%GOPATH%/src/govendor-demo ##在此目錄下建立項目叫gomod-demo
%GOPATH%/src/govendor-demo/main.go ##在項目目錄新建src文件夾並創建main.go
##########################項目結構#########################
govendor-demo
└─main.go
##########################main.go ########################
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
router := gin.Default()
router.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "Hello World")
})
router.Run(":8000")
}
go get -u github.com/gin-gonic/gin ##下載依賴到GOPATH/src
ps:go get命令下載位置由其他插件控制 若使用vgo 則下載位置將在GOPATH/pkg/mod需要手動git clone
完整的包裝規格爲: <path>[{/...|/^}][::<origin>][@[<version-spec>]]
一些例子:
github.com/kardianos/govendor 指定單個程序包和單個文件夾。
github.com/kardianos/govendor/...指定govendor該路徑下的所有引用包。
github.com/kardianos/govendor/^指定govendor文件夾和所有子文件夾。對於資源或不需要部分存儲庫很有用。
github.com/kardianos/govendor/^::github.com/myself/govendor 與上述相同,但從用戶“ myself”獲取。
github.com/kardianos/govendor/...@abc12032所有參考的修訂版軟件包abc12032。
github.com/kardianos/govendor/...@v1 與上述相同,但獲取最新的“ v1”標籤,例如“ v1.4.3”。
github.com/kardianos/govendor/...@=v1 獲取確切的版本“ v1”。
若需要使用govendor進行依賴管理
cd /d %GOPATH%/src/govendor-demo ##切換項目根目錄
govendor init ##生成vendor目錄和vendor.json文件
#######################生成vendor文件夾#################################
govendor-demo
├─vendor
│ └─vendor.json
└─main.go
#####################vendor.json#######################################
{
"comment": "",
"ignore": "test",
"package": [
{
"checksumSHA1": "mKall8xfKBPL/a5Ji//i968rLsY=",
"path": "github.com/gin-contrib/sse",
"revision": "43f0f29dbd2b3f0feeebff91fd9cda22db296938",
"revisionTime": "2019-09-05T05:13:34Z"
}
...省略
],
"rootPath": "govendor-demo"
}
step3:常用命令組合
govendor init ##初始化vendor
govendor list -v ##查看vendor依賴
govendor add -e ##從GOPATH添加vendor未添加的依賴
govendor fetch -e ##從GOPATH批量更新或添加vendor未添加的依賴
govendor sync ##根據已有的vendor.json裏面的依賴包信息。從遠程拉取包到vendor目錄下