golang依賴管理 govendor

目錄

 

一 、govendor簡介

二、govendor命令簡介

主命令

子參數 

三、govendor安裝配置

step0:環境準備

step1:安裝下載govendor

step2:使用govendor

step3:常用命令組合


一 、govendor簡介

  • vendor是go的一個目錄形式的包管理工具,而govendor結合了vendor這機制,擴展了功能:
  1. 支持分析源碼依賴包
  2. 支持指定包版本,使用vendor/vendor.json類似maven pom.xml
  3. 支持複製%GOPATH%/src的包到項目
  4. 支持vendor包下的包進行增刪改查等
  • vendor仍然需要GOPATH設定下來實現,但是慢慢脫離了GOPATH/src的依賴查找,import優先查找
  1. 當前GOPATH/項目根/vendor目錄
  2. GOROOT/src
  3. 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目錄下

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章