Golang學習--包管理工具glide

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

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

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

php項目中使用composer,javascript項目中使用npm,那麼在go項目中,我們需要使用什嗎?

包依賴工具的選擇

當前go的包管理工具有glide、godep、govendor和gvt等,相關對比的文章可以查看《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,當然大家也可以選擇其他包管理工具。

glide命令

我們來熟悉一下glide的命令

# 初始化glide配置glide createglide init# 添加新的包glide get [package name]# 根據glide.yaml更新包glide updateglide 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/glidehomepage: https://masterminds.github.io/glidelicense: MITowners:- name: Matt Butcher  email: technosophos@gmail.com  homepage: http://technosophos.com- name: Matt Farina  email: matt@mattfarina.com  homepage: https://www.mattfarina.comignore:- appengineexcludeDirs:- node_modulesimport:- 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 to1.2 - 1.4.5 which is equivalent to >= 1.2, <= 1.4.52.3.4 - 4.5 which is equivalent to >= 2.3.4, <= 4.51.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檔案,鎖定安裝包的版本。

參考摘錄文章

  • Golang依賴管理工具:glide從入門到精通使用
  • Golang包管理工具Glide,你值得擁有

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.