Golang包管理工具Glide,你值得擁有
阿新 • • 發佈:2019-01-01
“依賴地獄”是每個程式設計師在成長之路上都會面臨的情況,首先我們通過語義化版本來控制軟體的版本,然後在我們的專案裡通過指定軟體版本
來達到控制依賴的目的。
如:你的專案A依賴多個專案B1,B2,B3,而B1,B2,B3又依賴著其它專案C1,C2…。一個專案依賴這多個專案,當專案C1修復BUG版本發生變化,如果A依舊使用舊版本,勢必引起未知的問題。所以,你需要意識到包依賴管理的重要性。
在Go語言中,我比較推薦大家使用Glide作為包管理器。它能夠自動識別Godeps的包管理,十足的很方便。本節介紹glide.yml
的語義說明以及版本指定
的格式。
glide.yml檔案
glide.yml
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,*
x
,X
和*
字元可用作萬用字元。這適用於所有比較運算子。當在=
運算子上使用時,它會返回到 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