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

2021-09-06 22:10:31 字數 1350 閱讀 8485

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

在讀生產環境下go語言最佳實踐有感一文中,我介紹過soundcloud公司的做法,直接將第三庫的**check下來,放到自己project的vendor資料夾裡面,或者使用godep。

只是如今,我發現了一種更好的包管理方式gopkg。它通過約定使用帶有版本號號的url來讓go tool去check指定的版本號庫,儘管如今僅僅支援github的go repositories,可是我認為已經足夠強大。

乙個非常easy的樣例,我們通過例如以下方式獲取go的yaml包

go get gopkg.in/yaml.v1
而實際上,該yaml包相應的位址為:

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

gopkg支援的url格式非常easy:

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使用,譬如有例如以下版本號:

那麼gopkg相應選用的方式例如以下:

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

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

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

上面都提到了更改結構體,譬如我給乙個結構體新增字段,就可能不須要公升級主版本號,可是假設刪除結構體的乙個匯出字段,那就必須要公升級了。假設僅僅是單純的更改改結構體裡面非匯出欄位的東西,也不須要公升級。

更加具體的資訊,請直接檢視gopkg

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

比較方便的一種點選事件處理

1 button 2android id id button1 3android layout width wrap content 4android layout height wrap content 5android onclick onclick 6android text button1 ...

一種方便理解的mysql 去重方法

遇到個問題,240萬的郵箱資料,重複了70萬,這就是怎麼過濾的問題了。大致搜尋了一下,有一種比較土的方法。mysql沒有select into table select from table2 create table new table select from prev table 或者inser...

一種簡單方便的許可權控制方案

所有的頁面都繼承於乙個基頁面,這個基類中的load事件用於判斷許可權 protected pageaccess asstring private sub page load subpage load byval sender assystem.object byval e as system.eve...