gopkg:一種方便的go pakcage管理方式

來源:互聯網
上載者:User

標籤:go語言   gopkg   包管理   

在使用go的過程中,我們有時候會引入一些第三方庫來使用,而通常的方式就是使用go get,但是這種方式有一個很嚴重的問題,如果第三方庫更新了相關介面,很有可能你就無法使用了,所以我們一套很好地包管理機制。

在讀生產環境下go語言最佳實務有感一文中,我介紹過soundcloud公司的做法,直接將第三庫的代碼check下來,放到自己工程的vendor目錄裡面,或者使用godep。

不過現在,我發現了一種更好的包管理方式gopkg。它通過約定使用帶有版本號碼的url來讓go tool去check指定的版本庫,雖然現在只支援github的go repositories,但是我覺得已經足夠強大。

一個很簡單的例子,我們通過如下方式擷取go的yaml包

go get gopkg.in/yaml.v1

而實際上,該yaml包對應的地址為:

https://github.com/go-yaml/yaml

yaml.v1表明版本為v1,而在github上面,有一個對應的v1 branch。

gopkg支援的url格式很簡單:

gopkg.in/pkg.v3      → github.com/go-pkg/pkg (branch/tag v3, v3.N, or v3.N.M)gopkg.in/user/pkg.v3 → github.com/user/pkg   (branch/tag v3, v3.N, or v3.N.M)

我們使用v.N的方式來定義一個版本,然後再github上面對應的建立一個同名的分支。gopkg支援(vMAJOR[.MINOR[.PATCH]])這種類型的版本模式,如果存在多個major相同的版本,譬如v1,v1.0.1,v1.1.2,那麼gopkg會選用最進階別的v1.1.2使用,譬如有如下版本:

  • v1
  • v2.0
  • v2.0.3
  • v2.1.2
  • v3
  • v3.0

那麼gopkg對應選用的方式如下:

  • pkg.v1 -> v1
  • pkg.v2 -> v2.1.2
  • pkg.v3 -> v3.0

gopkg不建議使用v0,也就是0版本號碼。

gopkg同時列出了一些建議,在更新代碼之後是否需要升級主要版本或者不需要,一些必須升級主要版本的情況:

  • 刪除或者重新命名了任何的匯出介面,函數,變數等。
  • 給介面增加,刪除或者重新命名函數
  • 給函數或者介面增加參數
  • 更改函數或者介面的參數或者傳回值類型
  • 更改函數或者介面的傳回值個數
  • 更改結構體

而一下情況,則不需要升級主要版本號:

  • 增加匯出介面,函數或者變數
  • 給函數或者介面的參數名字重新命名了
  • 更改結構體

上面都提到了更改結構體,譬如我給一個結構體增加欄位,就可能不需要升級主要版本,但是如果刪除結構體的一個匯出欄位,那就必須要升級了。如果只是單純的更改改結構體裡面非匯出欄位的東西,也不需要升級。

更加詳細的資訊,請直接查看gopkg

可以看到,gopkg使用了一種很簡單地方式讓我們方便的對go pakcage進行版本管理。於是我也依葫蘆畫瓢,給我的log package做了一個v1版本的,你可以直接go get gopkg.in/siddontang/go-log.v1/log

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.