uber_go_guide_cn
Uber Go語言編碼規範
Uber是世界領先的生活出行服務提供商,也是Go語言的早期adopter,根據Uber工程部落格的内容,大緻可以判斷出Go語言在Uber内部扮演了十分重要的角色。Uber内部的Go語言工程實踐也是碩果累累,有大量Go實作的内部工具被Uber開源到github上,諸如被Gopher圈熟知的zap、jaeger等。2018年年末Uber将内部的Go風格規範開源到github,經過一年的積累和更新,該規範已經初具規模,并受到廣大Gopher的關注。本文是該規範的中文版本,并”夾帶“了部分筆者的點評,希望對國内Gopher有所幫助。
目錄
- 介紹
-
指導原則
- 指向interface的指針
- 接收器(receiver)與接口
- 零值Mutex是有效的
- 在邊界處拷貝Slices和Maps
- 使用defer做清理
- Channel的size要麼是1,要麼是無緩沖的
- 枚舉從1開始
- 錯誤類型
- 錯誤包裝(Error Wrapping)
- 處理類型斷言失敗
- 不要panic
- 使用go.uber.org/atomic
-
性能
- 優先使用strconv而不是fmt
- 避免字元串到位元組的轉換
-
規範
- 相似的聲明放在一組
- import組内的包導入順序
- 包名
- 函數名
- 導入别名
- 函數分組與順序
- 減少嵌套
- 不必要的else
- 頂層變量聲明
- 對于未導出的頂層常量和變量,使用_作為字首
- 結構體中的嵌入
- 使用字段名初始化結構體
- 本地變量聲明
- nil是一個有效的slice
- 小變量作用域
- 避免裸參數
- 使用原始字元串字面值,避免轉義
- 初始化結構體引用
- 格式化字元串放在Printf外部
- 命名Printf樣式的函數
-
模式
- 測試Tables
- 功能選項
說明:由于csdn 頁面布局問題。請移步github檢視具體内容
# uber_go_guide_cn