go語言編碼規範

開發工具:GoLandhtml

官方代碼規範:https://golang.org/doc/effective_go.html

1.工具

  • 提交代碼前需使用fmt工具格式化
  • 提交代碼前需使用vet工具進行靜態檢查

2.目錄規範

|– bingolang

|– build數組

    |–build_dev/test/release.shbash

|– gen-go函數

|– config工具

    |– dev/test/release.yml性能

|– pkg開發工具

    |–controllerui

    |–daothis

    |–rpc

    |–service

        |–*_impl.go

        |–*_test.go

        |–*_mock.go

|– vendor

|– README.md

3.命名規範

  1. 文件
    • 小寫+下劃線
  2. 包命名
    • package名和目錄保持一致,需避免和標準庫衝突
    • 避免import相對路徑
  3. 方法/接口
    • 採用駝峯命名法
    • 非對外方法,首字母需爲小寫
  4. 變量
    • 採用駝峯命名法
  5. 常量
    • 大寫+下劃線

4.註釋

  • 能夠經過 /* …… */ 或者 // ……增長註釋, //以後應該加一個空格
  • 註釋內容須要在文件/方法/變量上方

5.異常

  • 須要對異常作判斷處理
  • 不要將error賦值給匿名變量_

6.其餘

  • 不容許邏輯中調用Panic,選擇日誌的log.Fatal
  • 不要頻繁的調用defer
  • 儘早return,一旦有錯誤發生,立刻返回
  • if接受初始化語句,約定以下方式創建局部變量

    if err := file.Chmod(0664); err != nil {
        return err
    }複製代碼
  • 方法的接收器的名稱 通常採用strcut的第一個字母且爲小寫,而不是this,me或者self

type rpcClient struct {
       once sync.Once
}
func (r *rpcClient) newCodec(contentType string) (codec.NewCodec, error) {
       //
}

  • 對於bool類型的變量var b bool,直接使用它做爲判斷條件,而不是使用它和true/false進行比較
  • byte/string slice相等性比較,使用Equal
  • 當接受者是map, chan, func, 不要使用指針傳遞,由於它們自己就是引用類型
  • 當接受者是slice,而函數內部不會對slice進行切片或者從新分配空間,不要使用指針傳遞
  • 當函數內部須要修改接受者,必須使用指針傳遞
  • 當接受者是一個結構體,而且包含了sync.Mutex或者相似的用於同步的成員。必須使用指針傳遞,避免成員拷貝
  • 當接受者類型是一個結構體而且很龐大,或者是一個大數組,建議使用指針傳遞來提升性能,其餘場景使用值傳遞便可
相關文章
相關標籤/搜索