注釋
- 注釋應(yīng)該是一段完整的語句
- 注釋應(yīng)該以所描述內(nèi)容的名字開頭儒喊,并且以句號結(jié)尾
聲明空的切片
應(yīng)該使用: var t []string
, 而不是: t := []string{}
前者會避免內(nèi)存分配,除非使用了append()
不要使用panic
對于普通的錯誤處理,不要使用panic
,使用error和多返回值洪碳,
錯誤字符串
- 錯誤字符串不應(yīng)該大寫(除非是專有名詞或者縮寫)
- 不要以符號結(jié)尾
錯誤處理
不要使用_
去丟棄error. 當(dāng)一個函數(shù)返回error,去檢查并處理error,或者在真正的異常情形下,panic
import
將多個import
以組劃分锄奢,用空行來區(qū)分組谣光,標(biāo)準(zhǔn)包放在最上面
可以使用goimports來格式化
import dot
除非在test 文件中有循環(huán)依賴而去使用import .
這種形式弹谁,否則不要在你的程序中去使用茸塞,
它使你的程序難以閱讀野瘦,因為你很難清楚的知道它所處的層級關(guān)系描沟。
縮進(jìn)錯誤
盡量保持正常代碼最小的縮進(jìn)飒泻,縮進(jìn)錯誤處理代碼并且優(yōu)先處理。
盡量采取:
if err != nil {
// error handling
return // or continue, etc.
}
// normal code
不要:
if err != nil {
// error handling
} else {
// normal code
}
縮寫
縮略應(yīng)該保持一致吏廉,例如: url
/URL
, 而不是Url
, 這個規(guī)則同樣適用于當(dāng)ID
作為一個標(biāo)識的時候泞遗,使用appID
而不是appId
包名
所有對包內(nèi)的引用都應(yīng)該使用包名去訪問,因此包內(nèi)的名稱引用可以去掉包名這個標(biāo)識席覆。
例如:包chubby
, 不需要使用ChubbyFile
, 使用者調(diào)用方式為:chubby.ChubbyFil
,
而是使用File
史辙,使用者調(diào)用形式為:chubby.File
接收者類型
當(dāng)不知如何抉擇值接收還是指針接收時,使用指針接收佩伤。但有時值接收是有意義的聊倔,尤其是效率因素,對于不常變的小的結(jié)構(gòu)體生巡,基礎(chǔ)類型的值耙蔑。
下面是一些有用的指導(dǎo):
- 如果receiver是
map
,func
,chan
,不使用指針 - 如果receiver是
slice
,當(dāng)方法不會重組或重新分配切片障斋,不使用指針 - 如果方法需要改變receiver,必須使用指針
- 當(dāng)receiver是包含鎖或同步字段時纵潦,必須使用指針以避免復(fù)制
- 對于大的結(jié)構(gòu)體或數(shù)組,指針更加的高效
- 當(dāng)外面的改動必須影響到原始的receiver時垃环,必須使用指針
- 最后邀层,如果懷疑,那么請使用指針
變量名稱
在go
中變量名應(yīng)該盡可能的短遂庄,尤其是有作用域的局部變量寥院。
基本原則:
- 變量越是遠(yuǎn)離聲明,名稱越要具有描述性
- 全局變量或不常見的應(yīng)該使用描述性的名稱
- 對于方法的接收者涛目,一兩個字母就足夠了
- 常見的變量可以使用單個字符秸谢,如循環(huán)次數(shù)
i