我的golang代碼規(guī)范

俗話說的好,細(xì)節(jié)決定成敗。Coding過程中的規(guī)范就是這種可以決定成敗的細(xì)節(jié),好的規(guī)范可以是代碼的可讀性和可維護(hù)性都得到極大的增強(qiáng),下面是我個(gè)人在工作中對(duì)自己的要求和規(guī)范,主要遵循一致性的原則。

1、包(package)

1.1 包的命名

  • 全部小寫。沒有大寫或下劃線。
  • 簡(jiǎn)短而簡(jiǎn)潔。請(qǐng)記住,在每個(gè)使用的地方都完整標(biāo)識(shí)了該名稱。
  • 不用復(fù)數(shù)。例如net/url,而不是net/urls。
  • 使用語(yǔ)義比較強(qiáng)的命名,而不要使用信息量不足,看不懂的命名。

1.2 包的 import 格式

對(duì)包的導(dǎo)入進(jìn)行分組,標(biāo)準(zhǔn)庫(kù)和第三方庫(kù)

如:

import (
  "fmt"
  "os"

  "github.com/gobwas/ws"
  "golang.org/x/sync/errgroup"
)

2、函數(shù)

1.1 函數(shù)的命名

  • 語(yǔ)義明確(看到名字就能知道函數(shù)的作用和功能).
  • 駝峰式命名方式.(導(dǎo)出型的首字母必須大寫).
  • 盡量使用動(dòng)詞或者動(dòng)詞短語(yǔ).

1.2 函數(shù)的分組與順序

  • 導(dǎo)出的函數(shù)先出現(xiàn)在文件中

  • 同一文件中的函數(shù)按照接受者分組

    type something struct{ ... }
    
    func Run()error{
      ...
      return nil
    }
    func newSomething() *something {
        return &something{}
    }
    
    func (s *something) Cost() {
      return calcCost(s.weights)
    }
    
    func (s *something) Stop() {...}
    
    func calcCost(n []int) int {...}
    

1.3 函數(shù)內(nèi)部的規(guī)范

  • 減少嵌套

    for _, v := range data {
      if v.F1 != 1 {
        log.Printf("Invalid v: %v", v)
        continue
      }
    
      v = process(v)
      if err := v.Call(); err != nil {
        return err
      }
      v.Send()
    }
    

優(yōu)先處理了錯(cuò)誤和特殊情況,盡早的返回來減少嵌套

  • 函數(shù)內(nèi)部變量設(shè)置明確的值,盡量使用短變量聲明形式 (:=).
s  := "hello,world"
  • 函數(shù)內(nèi)部盡量縮小變量的作用域
if err := ioutil.WriteFile(name, data, 0644); err != nil {
 return err
}//err變量只在這行代碼中有效
  • 避免函數(shù)的參數(shù)語(yǔ)意不明

(未完待續(xù)...)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容