Dave Cheney:編寫簡單,可讀,可維護的Go程式碼的十個工程建議
本文最早由davecheney發表於 GopherCon Israel 2020,今天早上在GitHub上開源,https://github.com/davecheney/the-zen-of-go/blob/master/the-zen-of-go.adoc。
Dave Cheney是誰?
Dave Cheney是Go程式語言的開源貢獻者和專案成員。Dave Cheney是科技界備受尊重的代言人,他講的是軟體設計,效能和Go程式語言等各種主題。從2009年起,Dave Cheney就開始在世界各地寫作,教學和演講golang。Dave Cheney目前是VMware技術人員。在他的前公司收購之前,他曾在位於西雅圖的公司Heptio擔任工程師,專注於構建工具,幫助開發人員提高Kubernetes的工作效率。
更多瞭解Dave -> https://dave.cheney.net/about
## 編寫簡單,可讀,可維護的Go程式碼的十個建議
### Package的單一職責原則
對於一個Go package來說,好的設計是隻表達一個主題,提供的是一系列與該主題相關的方法,並且具有規範的命名。試著把你package的名字想象成一個產品營銷的演講,儘量用一個最恰當的詞來描述它所提供的內容。
### 錯誤的及時處理
健壯的程式碼總是能在程式崩潰之前及時地處理錯誤。儘管 `if err!= nil { return err }`冗長地出現在程式碼當中,但是它是非常有用的,總能在出錯的地方及時給你一個反饋,所以不要牴觸這種錯誤處理。不過對於`panic`和`recover`的使用來說,就要謹慎和剋制一些。
### 及時返回避免巢狀
你每多一個條件巢狀,都會或多或少地對程式的效能造成影響,也會造成可讀性的降低。所以儘量避免多層巢狀的控制流程。
### 是否使用併發由呼叫方決定
如果你的庫使用了併發,讓呼叫者選擇是否要併發執行你的庫或函式,不要強加於他們。
### 瞭解你的goroutine的生命週期
Goroutines佔用的資源包括鎖,變數,記憶體等。只有及時停止goroutine才能釋放這些資源,所以你務必
瞭解你的goroutine的生命週期。
### Avoid package level state
Seek to be explicit, reduce coupling, and spooky action at a distance by providing the dependencies a type needs as fields on that type rather than using package variables.(實在不知道怎麼解釋,就不誤人子弟了)
### 簡潔至上
簡潔並不是複雜的反義詞,而是意味著可讀性和可維護性。在可能的情況下,選擇更簡潔的解決方案
### 測試用例是你package API的門面
儘管使用者使用的是你的API,但是詳盡的測試用例能夠給使用者足夠的安全感。
### Talk is cheap, show me your benchmark
有太多的程式碼打著提升效能的旗號而沒有考慮其可維護性。要警惕過度優化帶來的緊耦合、封裝性差、可讀性差的問題。如果你選擇承擔這些成本,一定要給出有說服力的理由。
### 剋制是一種美德
適當地使用goroutines、channels、locks、interface、embedded等技術,切勿炫技。
### 可維護性
可維護性包括清晰,易讀,簡單等方面。你能想象到在你走後,你同事會如何看待你你留下的一坨程式碼嗎?所以你現在就應該考慮一下如何讓後面的人更容易地接手你的程式碼。
緊跟Go官方blog的步伐,追蹤熱點資訊,盡在go official blog。
如發現文中錯誤,可至公眾號反饋(也歡迎技術交流),一經採納有紅包奉上喲。
相關文章
- Go 語言實戰: 編寫可維護 Go 語言程式碼建議Go
- [譯] Go 語言實戰: 編寫可維護 Go 語言程式碼建議Go
- 編寫可維護的JSJS
- 書寫可維護程式碼的重要性
- 編寫可維護的JavaScript-程式設計風格JavaScript程式設計
- 編寫可維護的程式碼是一種溝通技巧 - Max Chernyak
- 編寫可閱讀的程式碼--基本規約
- 乾淨的程式碼: 編寫可讀的函式函式
- 『No22: 編寫可讀程式碼的藝術(1)』
- 編寫高質量可維護的程式碼:一目瞭然的註釋
- 關於介面可維護性的一些建議
- 【讀書筆記】:《編寫可維護的JavaScript》第07章 事件處理筆記JavaScript事件
- 程式碼簡潔的十條建議
- 如何提高程式碼的可維護性
- 編寫高質量程式碼 改善Python程式的91個建議Python
- 說說你對程式碼的可維護性的理解
- 精讀《可維護性思考》
- 編寫簡單的Java程式碼:HelloWoridJava
- 第6章:可維護性軟體構建方法 6.3可維護性構建技術
- 《編寫高質量程式碼:改善Java程式的151個建議》筆記Java筆記
- JavaScript的程式碼編寫注意事項,建議收藏!JavaScript
- 命名&可閱讀的程式碼
- 關於提高程式碼可維護性的一點思考
- 編寫可讀性程式碼的藝術--萬字總結,看到即學到
- 用 Go 編寫一個簡單的 WebSocket 推送服務GoWeb
- 第6章:可維護性軟體構建方法 6.1可維護性的度量和構造原則
- GO語言一個簡單的工程Go
- Java 列舉(Enums)解析:提高程式碼可讀性與易維護性Java
- 編寫高質量程式碼的十個祕訣
- 什麼是可維護性的程式碼,這十六點得知道
- 六邊形架構教程:構建可維護的Web應用程式 - DEV架構Webdev
- 一個簡單的BypassUAC編寫
- 為程式碼編寫穩定的單元測試 [Go]Go
- 編寫可擴充套件程式套件
- DBA日常維護SQL指令碼_自己編寫的SQL指令碼
- 用Java編寫一個最簡單的桌面程式Java
- Github即將破百萬的PDF:編寫高質量程式碼改善JAVA程式的151個建議GithubJava
- 編寫可移植C/C++程式的要點C++