天天看點

Uber Go 風格指南中文版uber_go_guide_cnUber Go語言編碼規範

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