通過抄寫學(xué) golang

golang 專注于軟件工程的實(shí)用性,學(xué)習(xí)起來不同于其他一些很 magic 的編程語言,我們要遵循標(biāo)準(zhǔn)和一些范式。

最好的資料就是 golang 的標(biāo)準(zhǔn)庫源代碼,只是有些庫本身要處理的事情比較復(fù)雜,或者需要一定的知識(shí)儲(chǔ)備,導(dǎo)致我們很難在短時(shí)間內(nèi)理清脈絡(luò)深入學(xué)習(xí)。那么我們需要一些小巧精悍適合初學(xué)者的開源庫,我們可以按照這些標(biāo)準(zhǔn)找:

  1. 符合 golang 標(biāo)準(zhǔn),使用地道的編程范式。
  2. 完善文檔和測(cè)試。
  3. 核心功能盡可能集中,代碼規(guī)模盡可能的小。

下面是我自己在尋覓的過程中感覺還不錯(cuò)的幾個(gè)開源庫:

語法:gorilla/context

這個(gè)核心代碼只有 100 行左右的小庫,可以讓我們學(xué)習(xí)到 golang 中 map 和 sync.RWMutex 在實(shí)踐中的使用,更為重要的是,從中我們可以學(xué)習(xí)軟件工程的一些優(yōu)秀實(shí)踐:注釋,測(cè)試,命名等。

HTTP:urfave/negroni

這個(gè)庫核心代碼也是 100 行左右,其功能就是為 http.Handler 添加 middleware 功能。這個(gè)庫值得學(xué)習(xí)的地方在于理解 net/http 的設(shè)計(jì)理念,看看實(shí)踐中如何用 interface 降低模塊之間的耦合度以及如何設(shè)計(jì)模塊和模塊之間的關(guān)系。

gorutine:go-playground/pool

核心代碼 150 行,主要功能是實(shí)現(xiàn)了一個(gè) gorutine 的 pool,抄寫這個(gè)庫的代碼可以了解 golang 中 gorutine 的基本概念,channel 和 select 的使用方式以及如何用 sync.WaitGroup 管理 gorutine 。

實(shí)踐抄寫的過程中,可以帶著這些問題:

  1. 這個(gè)開源庫的邊界、對(duì)外接口或者叫核心功能是什么?
  2. 這個(gè)開源庫在實(shí)現(xiàn)的過程中考慮了那些邊界條件,如何把握效率與可用性之間的平衡點(diǎn)?
  3. 這個(gè)開源庫用到了哪些內(nèi)置庫,如何使用的?
  4. 如果只看 README 和 go doc 輸出的對(duì)外接口,能否在不了解內(nèi)部實(shí)現(xiàn)的情況下自己寫出來?
  5. 如果源碼中有些東西我不熟悉,看過源碼,理清思路后能否默寫出來?
  6. 完成實(shí)現(xiàn)后,如何寫出簡單易讀并且覆蓋完善的測(cè)試?

這是我之前練習(xí) gorilla/context 寫的文章,大家可以參考一下我當(dāng)時(shí)的思路:
Golang 學(xué)習(xí) -- “聽寫” gorilla/context

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,029評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,286評(píng)論 4 61
  • 我為啥在今天啟動(dòng)進(jìn)階版本分享? 現(xiàn)在是2017年1月23日6點(diǎn)09分。我還躺在床上,娃兒在邊上,全家人都還沒起床。...
    星之奇旅的馮晶晶閱讀 6,288評(píng)論 3 37
  • 前幾天在上課的時(shí)候,有學(xué)生跑來問我:老師,您給我把把脈,最近好幾天都沒有上廁所了。 我進(jìn)行了望聞問切,發(fā)現(xiàn)這位學(xué)生...
    然谷中醫(yī)閱讀 457評(píng)論 0 0
  • 《新年特輯》目錄上一篇:新年特輯?|炸貨|【裸·味】 【裸·味】或許是生活中不可缺少的味道,幸福不在于你的擁有,實(shí)...
    裸食閱讀 1,073評(píng)論 6 8

友情鏈接更多精彩內(nèi)容