包管理工具 glide

CraryPrimitiveMan發表於2018-05-21

文章來源:Golang學習--包管理工具glide

上一篇文章中我們已經成功的執行了go的程式碼,這是我們邁出的最基礎的一步。

一個專案通常會依賴很多外部的庫,當依賴的庫比較多的時候,手工管理就會比較麻煩,這個時候就需要包管理工具出場了,幫你管理好所有依賴的庫。

php專案中使用composer,javascript專案中使用npm,那麼在go專案中,我們需要使用什麼?

包依賴工具的選擇

當前go的包管理工具有glidegodepgovendorgvt等,相關對比的文章可以檢視《go依賴包管理工具對比》

功能對比可以參考如下內容(雖然跟上面文章比較的工具有些不同),內容來自《Go Package Manager Comparison》

Glide GB Godep Govendor
Semantic Versions
Semantic Version Ranges
Resolves dependency trees including versions
Uses common range syntax (similar to PHP, JavaScript, etc)
Tries to import from other package managers
Copies from the GOPATH ✕*
Works with the go toolchain
Locks for reproducible builds
Allows package/version checked into VCS or installed on demand
Aliased repos (e.g., using forks)
Plugin extensibility model
Supports deleting unused repos for cleanup (opt-in)

根據我們的需求和了解,選擇了使用glide,當然大家也可以選擇其他包管理工具。

現在官方也出了包管理工具dep,感興趣的可以檢視這篇文章《官方依賴管理工具:dep》

為什麼我們不選擇dep,而使用glide,有以下兩點原因:

  1. 我們需要支援VCS,dep暫時不支援
  2. dep需要翻牆

當然如果這兩點對你來說不是問題的話,我也推薦大家使用dep

glide命令

我們來熟悉一下glide的命令

# 初始化glide配置
glide create
glide init

# 新增新的包
glide get [package name]

# 根據glide.yaml更新包
glide update
glide up

# 根據glide.yaml安裝包
glide install

# 返回當前專案的名稱
glide name

# 列出當前專案已安裝的包
glide list

# 替換包的映象
glide mirror set [original] [replacement]
glide mirror set [original] [replacement] --vcs [type]

# 移除包的映象
glide mirror remove [original]

# 獲取包的映象列表
glide mirror list

glide mirror特別適用於不能訪問一些站點,導致很Golang的依賴包不能通過go get下載的情況。可以通過配置將牆了的版本庫 URL 對映到沒被牆的 URL,甚至也可以對映到本地版本庫。

掌握上面的命令就可以使用glide了,是不是很簡單?

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

glide.yaml中的這些元素的解釋如下:

  • 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版本號指定規則如下:

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

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
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.lock檔案,鎖定安裝包的版本。

程式碼可參考:https://github.com/CraryPrimitiveMan/go-in...

參考摘錄文章

本作品採用《CC 協議》,轉載必須註明作者和本文連結

Talk is cheap. Show me the code.

相關文章