1. 程式人生 > >Golang包管理工具Glide,你值得擁有

Golang包管理工具Glide,你值得擁有

“依賴地獄”是每個程式設計師在成長之路上都會面臨的情況,首先我們通過語義化版本來控制軟體的版本,然後在我們的專案裡通過指定軟體版本來達到控制依賴的目的。

如:你的專案A依賴多個專案B1,B2,B3,而B1,B2,B3又依賴著其它專案C1,C2…。一個專案依賴這多個專案,當專案C1修復BUG版本發生變化,如果A依舊使用舊版本,勢必引起未知的問題。所以,你需要意識到包依賴管理的重要性。

在Go語言中,我比較推薦大家使用Glide作為包管理器。它能夠自動識別Godeps的包管理,十足的很方便。本節介紹glide.yml的語義說明以及版本指定的格式。

glide.yml檔案

glide.yml

是 glide 包管理的配置檔案。下面我們對glide.yml的相關元素進行說明。

這裡是一個完整的glide.yml檔案:

package: github.com/Masterminds/glide
homepage: https://masterminds.github.io/glide
license: MIT
owners:
- name: Matt Butcher
  email: [email protected].com
  homepage: http://technosophos.com
- name: Matt Farina
  email: [email protected]
.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: [email protected].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:頂部的 package 是它所在GOPATH的位置,glide 將從該位置下開始導包。
  • homepage:該專案的詳情頁面。
  • license:許可證標識,可以是SPDX license字串或檔案路徑。
  • owners:專案的所有者資訊,便於接受漏洞資訊。
  • ignore:忽略匯入的包,注意是包而不是目錄。
  • excludeDirs:排除掃描依賴的目錄。
  • import:import 的包列表:
    • package:匯入包的名稱,必填。軟體包名稱遵循go工具所用的相同模式。這意味著:1、對映到VCS遠端位置的軟體包名稱以.git,.bzr,.hg或.svn結尾。 例如,example.com/foo/pkg.git/subpkg。2、GitHub, BitBucket, Launchpad, IBM Bluemix Services, and Go on Google Source是特殊情況,不需要 VCS 擴充套件。
    • version:可以為semantic version, semantic version range, branch, tag 或者 commit id。
    • repo:如果包名稱不是repo位置或這是一個私人儲存庫,它可以去這裡。 該軟體包將從repo簽出並放在軟體包名稱指定的位置。 這允許使用fork。
    • vcs:要使用的VCS,如git,hg,bzr或svn。僅當無法從名稱中檢測到型別時才需要。例如,以.git或GitHub結尾的倉庫可以被檢測為Git。 對於Bitbucket的repo,我們可以聯絡API來發現型別。
    • subpackages:在儲存庫中使用的包的記錄。這不包括儲存庫中的所有包,而是包括正在使用的包。
    • os:用於過濾的作業系統的列表。如果設定它將比較當前執行時作業系統與指定的作業系統,並且只有獲取匹配的依賴。如果未設定過濾,則跳過。這些名稱與構建標誌和GOOS環境變數中使用的名稱相同。
    • arch:用於過濾的體系結構列表。如果設定它將比較當前執行時架構與指定的架構,並且只有在匹配時獲取依賴關係。如果未設定過濾,則跳過。名稱與構建標誌和GOARCH環境變數中使用的名稱相同。
  • testImport:在匯入中未列出的測試中使用的軟體包列表。每個包具有與匯入下列出的相同的詳細資訊。

版本和範圍

Glide 支援Semantic Versions,SemVer ranges,branches,tags和 commit ids 作為 version.

基本

一個簡單的範圍格式是> 1.2.3。這告訴 Glide 去使用1.2.3之後的最新版本。它還支援以下操作符:

  • =:等於(可省略)
  • !=:不等於
  • >:大於
  • <:小於
  • >=:大於等於
  • <=:小於等於

這些還可以組合。,是並且和||是或者。或運算子會導致對組和運算子進行檢查,如:">= 1.2, < 3.0.0 || >= 4.2.3"

連字元-

有多個快捷方式來處理範圍,第一個是連字元範圍。這些看起來像:

  • 1.2 - 1.4.5等價於>= 1.2, <= 1.4.5
  • 2.3.4 - 4.5等價於>= 2.3.4, <= 4.5

萬用字元x,X,*

xX*字元可用作萬用字元。這適用於所有比較運算子。當在=運算子上使用時,它會返回到 patch 級別比較(參見下面的波形)。例如:

  • 1.2.x等價於>= 1.2.0, < 1.3.0
  • >= 1.2.x等價於>= 1.2.0
  • <= 2.x等價於< 3
  • *等價與>= 0.0.0

波浪號~(Patch)

波形(~)比較運算子用於指定 minor 版本修改的範圍,而當缺少 minor 編號時,major 級別更改。例如:

  • ~1.2.3等價於>= 1.2.3, < 1.3.0
  • ~1等價於>= 1, < 2
  • ~2.3等價於>= 2.3, < 2.4
  • ~1.2.x等價於>= 1.2.0, < 1.3.0
  • ~1.x等價於>= 1, < 2

插入符^(Major)

插入符號(^)比較運算子用於 major 級別的更改。當 API 版本的比較作為 major 更改是 API 打破時,這是有用的。例如:

  • ^1.2.3等價於>= 1.2.3, < 2.0.0
  • ^1.2.x等價於>= 1.2.0, < 2.0.0
  • ^2.3等價於>= 2.3, < 3
  • ^2.x等價於>= 2.0.0, < 3