俗話說的好,細(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ù)...)