Golang Vendor 包管理工具 glide 使用教程


Glide 是 Golang 的 Vendor 包管理器,方便你管理 vendor 和 verdor 包。類似 Java 的 Maven,PHP 的 Composer。

主要特性:

  • 簡單管理依賴

  • 支持 versioning packages,包括 Semantic Versioning 2.0.0 支持

  • 支持 aliasing packages (e.g. for working with github forks)

  • Remove the need for munging import statements

  • 支持所有 go 工具

  • 支持 VCS 工具和 Go 支持:git、bzr、hg、svn

  • 支持定制本地和全局插件 (see docs/plugins.md)

  • 倉庫緩存

結構:

- $GOPATH/src/myProject  (Your project)
  |
  |-- glide.yaml
  |
  |-- glide.lock
  |
  |-- main.go (Your main go code can live here)
  |
  |-- mySubpackage (You can create your own subpackages, too)
  |    |
  |    |-- foo.go
  |
  |-- vendor
       |-- github.com
            |
            |-- Masterminds
                  |
                  |-- ... etc.

安裝

# 下載源碼包(目前版本:0.12.3)
go get github.com/Masterminds/glide

# 進入目錄
cd github.com/Masterminds/glide

# 編譯
# 注意,如果是離線安裝的話,需要執行 go install
make build
go build -o glide -ldflags "-X main.version=v0.11.0" glide.go

使用

檢測項目的依賴包

Glide 能檢測項目的依賴包 並且 創建一個名為 glide.yaml 的文件。能自動識別 Godep, GPM, Gom, and GB 等工具的配置文件。在 項目的 根目錄 執行如下命令:

glide init

運行 glide init 命令的時候,會詢問你是否需要以向導的方式提示及配置依賴包的版本,每步操作都需要你的確認。

更新 依賴包

執行如下命令,依據配置文件 glide.yaml 的內容,計算各個依賴包的精確版本號:

glide up

“up”是“update”的簡寫。這個命令會根據 glide.yaml 文件計算所需依賴包,並遞歸計算依賴包所需依賴包,並且確認各個依賴包的版本號。最后把這些信息寫到一個名為 glide.lock 的文件中。

Glide 會把所有依賴包放到項目根目錄的 vendor/ 目錄下。如果某個依賴包有自己的 vendor/ 目錄,默認情況下,Glide 不會刪除它。go 工具鏈會使用它們的嵌套版本。如果想移除它們,使用 up 或 install 命令時,再加一個 --strip-vendor-v 標簽。

安裝 依賴包

如果想下載所需依賴包,執行如下命令:

glide install

這個命令會做以下 2 件事:

(1) 如果 glide.lock 文件已經存在,Glide 會把 glide.lock 中已經計算好的確定版本號的依賴包批量下載到 vendor/ 目錄下;

(2) 如果 glide.local 文件不存在,則會先執行 update 命令;

增加更多的 依賴包

使用 get 命令,Glide 能幫你添加更多的依賴包到 glide.yaml 文件中,如下所示:

glide get github.com/Masterminds/semver

glide get 命令功能 類似 go get,但是它會把依賴包下載到 vendor/ 目錄,並且把相關信息配置到 glide.yaml 文件。

這個 get 命令 也可以帶版本號,如下所示:

glide get github.com/Masterminds/semver#~1.2.0

“#”是依賴包 和 版本號的分隔符,版本號可以是 語義版本,范圍版本,分支版本,標簽 或 提交的版本ID。

如果沒有指定 具體版本號 或 范圍版本號, Glide 會使用 語義版本號,並且提示要求你確認所需要的版本號

注意:

glide 會把下載下來的包緩存到  ~/.glide/cache 目錄下 。

 

版本號的指定(version字段)

Glide 支持 語義版本,范圍版本,分支版本,標簽版本,版本ID 最為版本號。

基本范圍

舉個簡單例子,范圍版本 > 1.2.3,表示 Glide 會用 大於 1.2.3 以后的最新版本。目前支持如下操作符:

  • =: equal (aliased to no operator)
  • !=: not equal
  • >: greater than
  • <: less than
  • >=: greater than or equal to
  • <=: less than or equal to

它們還可以組合用,“,”表示 “邏輯與”,“||”表示“邏輯或”,如 ">= 1.2, < 3.0.0 || >= 4.2.3"

連字符范圍

  • 1.2 - 1.4.5 which is equivalent to >= 1.2, <= 1.4.5
  • 2.3.4 - 4.5 which is equivalent to >= 2.3.4, <= 4.5

通配符比較

字符 “x”、“X”、"*" 可以當做通配符,它可以應用於所有的比較操作中。當應用於“=”操作符中,它表示補丁最低級別的比較,如下所示:

  • 1.2.x is equivalent to >= 1.2.0, < 1.3.0
  • >= 1.2.x is equivalent to >= 1.2.0
  • <= 2.x is equivalent to < 3
  • is equivalent to >= 0.0.0

波浪線 范圍比較(補丁) 

波浪線比較操作符主要用於補丁級別范圍比較,當為次要版本數字沒指定時,次要版本不變,主版本修改。如下所示:

  • ~1.2.3 is equivalent to >= 1.2.3, < 1.3.0
  • ~1 is equivalent to >= 1, < 2
  • ~2.3 is equivalent to >= 2.3, < 2.4
  • ~1.2.x is equivalent to >= 1.2.0, < 1.3.0
  • ~1.x is equivalent to >= 1, < 2

脫字符 范圍比較(主版本)

脫字符比較操作符是 為主版本號修改服務的。通常用於接口 主版本比較,如下所示:

  • ^1.2.3 is equivalent to >= 1.2.3, < 2.0.0
  • ^1.2.x is equivalent to >= 1.2.0, < 2.0.0
  • ^2.3 is equivalent to >= 2.3, < 3
  • ^2.x is equivalent to >= 2.0.0, < 3

glide.yaml 文件

文件 glide.yaml 包含了 當前包(項目)及依賴包 的相關信息,以下示例羅列了該文件的主要元素:

package: github.com/Masterminds/glide
homepage: https://masterminds.github.io/glide
license: MIT
owners:
- name: Matt Butcher
  email: technosophos@gmail.com
  homepage: http://technosophos.com
- name: Matt Farina
  email: matt@mattfarina.com
  homepage: https://www.mattfarina.com
ignore:
- appengine
excludeDirs:
- node_modules
import:
- package: gopkg.in/yaml.v2
- package: github.com/Masterminds/vcs
  version: ^1.2.0
  repo:    git@github.com:Masterminds/vcs
  vcs:     git
- package: github.com/codegangsta/cli
  version: f89effe81c1ece9c5b0fda359ebd9cf65f169a51
- package: github.com/Masterminds/semver
  version: ^1.0.0
testImport:
- package: github.com/arschles/assert

有以下元素:

  • package: 頂級包導入路徑,即 相對 GOPATH/src 的包的導入路徑。
  • homepage: 項目的主頁,如 http://k8s.io 。
  • license: 項目的使用權協議。
  • owners: 項目的作者信息,如 姓名、聯系方式(email)、個人主頁 等。
  • ignore: 需要忽略導入的包名列表。注意,不是文件夾名。
  • excludeDirs: 需要忽略掃描依賴包的文件夾列表。
  • import: 需要導入的依賴包,每個依賴包 包含以下元素:
    • package: 包路徑信息。
    • version: 版本號,如 語義版本、范圍版本、分支版本、標簽版本、提交號版本等,更多的信息查看文檔:versioning documentation
    • repo: 包的倉庫地址信息。如果包名不是包倉庫路徑信息 或者是 私有倉庫,可以從線上的倉庫 check out 文件到 包名中指定的(本地)路徑,也可以使用 fork 指令。 
    • vcs: 使用到的版本控制系統,如 git、hg、bzr 或 svn。如果不能從上述的 package 中確定 版本控制系統類型的話,需要在這里指定。如 倉庫路徑帶有 .git 后綴 或 GitHub 倉庫路徑 等都可以自動識別類型為 git。
    • subpackages: 當前包所使用到的子包名列表。
    • os: 能適用於哪些操作系統? 與 運行時(runtime) 當中的 操作系統變量(GOOS) 匹配比較,如果是匹配上,就獲取該包。
    • arch: 能使用於哪些結構?與 運行時(runtime) 當中的 runtime architecture 變量(GOARCH)匹配比較,如果匹配上,就獲取該包。
  • testImport: 用於測試的包。

 

 

翻譯自 官方教程:

http://glide.readthedocs.io/en/stable/versions/

 

 

延伸閱讀:

.yaml 文件格式簡介

【Go命令教程】命令匯總

推薦Golang Vendor 包機制 及 注意事項


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM