Go 語言之禪

知名 Go 語言貢獻者與佈道師 Dave Cheney 2020 年發表了名爲《The Zen of Go》,給大家分享了編寫簡單、可讀、可維護的 Go 代碼的十個工程要點。

每個包實現單一目標
設計良好的 Go 軟件包提供一個單一的思路,以及一系列相關的行爲。一個好的 Go 軟件包首先需要選擇一個好名字,使用電梯法則(30 秒內向客戶講清楚一個方案),僅用一個詞來思考你的軟件包要提供什麼功能。

明確處理錯誤
健壯的程序其實是由處理故障案例的片段組成的,並且需要在故障出現之前處理好。冗餘的 if err != nil {return err} 比出了故障再一個個去處理更有價值。panic 和 recover 也一樣。

儘早 return,不要深陷
每次縮進時都會在程序員的堆棧中添加另一個先決條件,這會佔用他們短期內存中的 7±2 個片段。避免需要深層縮進的控制流。與其深入嵌套,不如使用守衛子句將成功路徑保持在左側。

併發權留給調用者
讓調用者選擇是否要異步運行你的庫或函數,不要強制他們使用異步。

在啓動 goroutine 之前,要知道它什麼時候會停止
goroutines 擁有資源、鎖、變量與內存等,釋放這些資源的可靠方法是停止 goroutine。

避免包級別的狀態
要完成明確和減少耦合的操作,需要通過提供類型需要的依賴項作爲該類型上的字段,而不是使用包變量。

簡單性很重要
簡單性不是老練的代名詞。簡單並不意味着粗糙,它意味着可讀性和可維護性。如果可以選擇,請遵循較簡單的解決方案。

編寫測試以確認包 API 的行爲
軟件包的 API 是與使用者的一份合約,不管先後,不管多少,一定要進行測試。測試是確定合約的保證。要確保測試使用者可以觀察和依賴的行爲。

如果你認爲速度緩慢,先通過基準測試進行驗證
以性能之名會犯下許多危害可維護性的罪行。優化會破壞抽象、暴露內部和緊密耦合。如果要付出這樣的代價,請確保有充分理由這樣做。

節制是一種美德
適度使用 goroutine、通道、鎖、接口與嵌套。

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

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/mKe0w3urHJEe9iYJ7svCuA