Go語言之禪

Dave Cheney即將在2021 GopherChina帶來《The Zen of Go》的最新版本分享

知名 Go 語言貢獻(xiàn)者與布道師 Dave Cheney 2020年發(fā)表了名為《The Zen of Go》,給大家分享了編寫簡單、可讀、可維護(hù)的 Go 代碼的十個(gè)工程要點(diǎn)。
每個(gè)包實(shí)現(xiàn)單一目標(biāo)
設(shè)計(jì)良好的 Go 軟件包提供一個(gè)單一的思路,以及一系列相關(guān)的行為。一個(gè)好的 Go 軟件包首先需要選擇一個(gè)好名字,使用電梯法則(30 秒內(nèi)向客戶講清楚一個(gè)方案),僅用一個(gè)詞來思考你的軟件包要提供什么功能。
明確處理錯(cuò)誤
健壯的程序其實(shí)是由處理故障案例的片段組成的,并且需要在故障出現(xiàn)之前處理好。冗余的if err != nil { return err }比出了故障再一個(gè)個(gè)去處理更有價(jià)值。panic 和 recover 也一樣。
盡早 return,不要深陷
每次縮進(jìn)時(shí)都會在程序員的堆棧中添加另一個(gè)先決條件,這會占用他們短期內(nèi)存中的 7±2 個(gè)片段。避免需要深層縮進(jìn)的控制流。與其深入嵌套,不如使用守衛(wèi)子句將成功路徑保持在左側(cè)。
并發(fā)權(quán)留給調(diào)用者
讓調(diào)用者選擇是否要異步運(yùn)行你的庫或函數(shù),不要強(qiáng)制他們使用異步。
在啟動 goroutine 之前,要知道它什么時(shí)候會停止
goroutines 擁有資源、鎖、變量與內(nèi)存等,釋放這些資源的可靠方法是停止 goroutine。
避免包級別的狀態(tài)
要完成明確和減少耦合的操作,需要通過提供類型需要的依賴項(xiàng)作為該類型上的字段,而不是使用包變量。
簡單性很重要
簡單性不是老練的代名詞。簡單并不意味著粗糙,它意味著可讀性和可維護(hù)性。如果可以選擇,請遵循較簡單的解決方案。
編寫測試以確認(rèn)包 API 的行為
軟件包的 API 是與使用者的一份合約,不管先后,不管多少,一定要進(jìn)行測試。測試是確定合約的保證。要確保測試使用者可以觀察和依賴的行為。
如果你認(rèn)為速度緩慢,先通過基準(zhǔn)測試進(jìn)行驗(yàn)證
以性能之名會犯下許多危害可維護(hù)性的罪行。優(yōu)化會破壞抽象、暴露內(nèi)部和緊密耦合。如果要付出這樣的代價(jià),請確保有充分理由這樣做。
節(jié)制是一種美德
適度使用 goroutine、通道、鎖、接口與嵌套。
今年2021年GopherChina大會,David將要帶來全新的Go語言之禪的版本,閱讀原文速速鎖定早鳥票名額。


David是Go編程語言的開源貢獻(xiàn)者和項(xiàng)目成員。David是技術(shù)界中受人尊敬的代言人,他在軟件設(shè)計(jì),性能和Go編程語言等各種主題上發(fā)表演講。David是全球Go語言布道師,長期在Go高性能編程上面有深入的研究。

