這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
“依賴地獄”是每個程式員在成長之路上都會面臨的情況,首先我們通過語義化版本來控制軟體的版本,然後在我們的項目裡通過指定軟體版本
來達到控制依賴的目的。
如:你的項目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/glidehomepage: https://masterminds.github.io/glidelicense: MITowners:- name: Matt Butcheremail: technosophos@gmail.comhomepage: http://technosophos.com- name: Matt Farinaemail: matt@mattfarina.comhomepage: https://www.mattfarina.comignore:- appengineexcludeDirs:- node_modulesimport:- package: gopkg.in/yaml.v2- package: github.com/Masterminds/vcsversion: ^1.2.0repo: git@github.com:Masterminds/vcsvcs: git- package: github.com/codegangsta/cliversion: f89effe81c1ece9c5b0fda359ebd9cf65f169a51- package: github.com/Masterminds/semverversion: ^1.0.0testImport:- 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 層級比較(參見下面的波形)。例如:
波浪號~
(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
本文連結:https://deepzz.com/post/glide-package-management-introduce.html