go 編程規範

參考https://www.cnblogs.com/liang1101/p/7719762.html

Go 語言編程規範

1. gofmt 命令

  大部分的格式問題可以通過 gofmt 來解決,gofmt 自動格式化代碼,保證所有的 go 代碼與官方推薦的格式保持一致,所有格式有關問題,都以gofmt的結果爲準。所以,建議在提交代碼庫之前先運行一下這個命令。

2. 行長

  一行最長不超過80個字符,超過的使用換行展示,儘量保持格式優雅。

3. 註釋

  在編碼階段應該同步寫好 變量、函數、包 的註釋,最後可以利用 godoc 命令導出文檔。註釋必須是完整的句子,句子的結尾應該用句號作爲結尾(英文句號)。註釋推薦用英文,可以在寫代碼過程中鍛鍊英文的閱讀和書寫能力。而且用英文不會出現各種編碼的問題。

  每個包都應該有一個包註釋,一個位於 package 子句之前的塊註釋或行註釋。包如果有多個 go 文件,只需要出現在一個 go 文件中即可。

  // ping包實現了常用的ping相關的函數
  package ping 

4. 命名

  • 需要註釋來補充的命名就不算是好命名。
  • 使用可搜索的名稱:單字母名稱和數字常量很難從一大堆文字中搜索出來。單字母名稱僅適用於短方法中的本地變量,名稱長短應與其作用域相對應。若變量或常量可能在代碼中多處使用,則應賦其以便於搜索的名稱。
  • 做有意義的區分:Product 和 ProductInfo 和 ProductData 沒有區別,NameString 和 Name 沒有區別,要區分名稱,就要以讀者能鑑別不同之處的方式來區分 。
  • 函數命名規則:駝峯式命名,名字可以長但是得把功能,必要的參數描述清楚,函數名應當是動詞動詞短語,如 postPayment、deletePage、save。並依 Javabean 標準加上 get、set、is前綴。例如:xxx + With + 需要的參數名 + And + 需要的參數名 + …..
  • 結構體命名規則:結構體名應該是名詞或名詞短語,如 Custome、WikiPage、Account、AddressParser,避免使用 Manager、Processor、Data、Info、這樣的類名,類名不應當是動詞。
  • 包名命名規則:包名應該爲小寫單詞,不要使用下劃線或者混合大小寫。
  • 接口命名規則:單個函數的接口名以”er”作爲後綴,如 Reader,Writer。接口的實現則去掉“er”。
複製代碼
  type Reader interface {
        Read(p []byte) (n int, err error)
  }

  // 多個函數接口
  type WriteFlusher interface {
      Write([]byte) (int, error)
      Flush() error
  }
複製代碼

5. 常量

  常量均需使用全部大寫字母組成,並使用下劃線分詞:

  const APP_VER = "1.0"

  如果是枚舉類型的常量,需要先創建相應類型:

  type Scheme string

  const (
      HTTP  Scheme = "http"
      HTTPS Scheme = "https"
  )

6. 變量

  變量命名基本上遵循相應的英文表達或簡寫,在相對簡單的環境(對象數量少、針對性強)中,可以將一些名稱由完整單詞簡寫爲單個字母,例如:

    • user 可以簡寫爲 u
    • userID 可以簡寫 uid
    • 若變量類型爲 bool 類型,則名稱應以 Has, Is, Can 或 Allow 開頭:
  var isExist bool
  var hasConflict bool
  var canManage bool
  var allowGitHook bool

7. 變量命名慣例

  變量名稱一般遵循駝峯法,但遇到特有名詞時,需要遵循以下規則:

  • 如果變量爲私有,且特有名詞爲首個單詞,則使用小寫,如:apiClient
  • 其它情況都應當使用該名詞原有的寫法,如 APIClient、repoID、UserID
  • 錯誤示例:UrlArray,應該寫成 urlArray 或者 URLArray

  下面列舉了一些常見的特有名詞:

  "API""ASCII""CPU""CSS""DNS""EOF",GUID""HTML""HTTP""HTTPS""ID","IP","JSON","LHS","QPS","RAM","RHS"
  "RPC", "SLA""SMTP""SSH","TLS","TTL","UI""UID""UUID""URI""URL""UTF8""VM""XML","XSRF","XSS"

8. struct規範

  struct申明和初始化格式採用多行,定義如下:

  type User struct{
      Username  string
      Email     string
  }

  初始化如下:

  u := User{
      Username: "test",
      Email:    "[email protected]",
  }

9. panic

  儘量不要使用panic,除非你知道你在做什麼

10. import

  對 import 的包進行分組管理,用換行符分割,而且標準庫作爲分組的第一組。如果你的包引入了三種類型的包,標準庫包,程序內部包,第三方包,建議採用如下方式進行組織你的包

複製代碼
package main

import (
    "fmt"
    "os"

    "kmg/a"
    "kmg/b"

    "code.google.com/a"
    "github.com/b"
)
複製代碼

  goimports 會自動幫你格式化

11. 參數傳遞

  • 對於少量數據,不要傳遞指針
  • 對於大量數據的 struct 可以考慮使用指針
  • 傳入的參數是 map,slice,chan 不要傳遞指針,因爲 map,slice,chan 是引用類型,不需要傳遞指針的指針

12. 單元測試

  單元測試文件名命名規範:

     example_test.go

  測試用例的函數名稱必須以 Test 開頭,例如:

    func TestExample

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章