1 命名規范
1.1 Go是一門區分大小寫的語言。
命名規則涉及變量、常量、全局函數、結構、接口、方法等的命名。 Go語言從語法層面進行了以下限定:任何需要對外暴露的名字必須以大寫字母開頭,不需要對外暴露的則應該以小寫字母開頭。
當命名(包括常量、變量、類型、函數名、結構字段等等)以一個大寫字母開頭,如:Analysize,那么使用這種形式的標識符的對象就可以被外部包的代碼所使用(客戶端程序需要先導入這個包),這被稱為導出(像面向對象語言中的 public);
命名如果以小寫字母開頭,則對包外是不可見的,但是他們在整個包的內部是可見并且可用的(像面向對象語言中的 private )
而Go 語言中,任何標識符(變量,常量,函數,自定義類型等)都應該滿足以下規律:
- 連續的字符或數字組成。
- 以字符或下劃線開頭。
- 不能和 Go 關鍵字沖突。
go有如下關鍵字
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
1.2 包名稱
保持package的名字和目錄保持一致,盡量采取有意義的包名,簡短,有意義,盡量和標準庫不要沖突。包名應該為小寫單詞,不要使用下劃線或者混合大小寫。
1.3 文件命名
盡量采取有意義的文件名,簡短,有意義,應該為小寫單詞,使用下劃線分隔各個單詞。
1.4 結構體命名
采用駝峰命名法,首字母根據訪問控制大寫或者小寫
struct 申明和初始化格式采用多行,例如下面:
type MainConfig struct {Port string `json:"port"`Address string `json:"address"`
}
1.5 常量命名
常量均需使用全部大寫字母組成,并使用下劃線分詞
const APP_URL = "https://www.baidu.com"
如果是枚舉類型的常量,需要先創建相應類型:
type Scheme stringconst (HTTP Scheme = "http"HTTPS Scheme = "https"
)
1.6 變量命名
和結構體類似,變量名稱一般遵循駝峰法,首字母根據訪問控制原則大寫或者小寫,但遇到特有名詞時,需要遵循以下規則:
如果變量為私有,且特有名詞為首個單詞,則使用小寫,如 appService
若變量類型為 bool 類型,則名稱應以 Has, Is, Can 或 Allow 開頭
var isExist bool
var hasConflict bool
var canManage bool
var allowGitHook bool
2. 錯誤處理
錯誤處理的原則就是不能丟棄任何有返回err的調用,不要使用 _ 丟棄,必須全部處理。接收到錯誤,要么返回err,或者使用log記錄下來
- 盡早return:一旦有錯誤發生,馬上返回
- 盡量不要使用panic,除非你知道你在做什么
- 錯誤描述如果是英文必須為小寫,不需要標點結尾
- 采用獨立的錯誤流進行處理
// 錯誤寫法
if err != nil {// error handling
} else {// normal code
}// 正確寫法
if err != nil {// error handlingreturn // or continue, etc.
}
// normal code
3. 單元測試
單元測試文件名命名規范為 example_test.go 測試用例的函數名稱必須以 Test 開頭,例如:TestExample 每個重要的函數都要首先編寫測試用例,測試用例和正規代碼一起提交方便進行回歸測試 。
4. 常量
相對于變量而言,常量是在程序使用過程中,不會改變的數據。有些地方你需要將定義好的常量重復使用,代碼中你不允許它的值改變。例如 圓周率 在程序執行過程中不會改變。
常量只能在其聲明的范圍內使用,如果在一個函數內部作用域中聲明的常量與外部名稱相同, 則只用自己內部的常量, 它將忽略外部的常量。
4.1 總結
- 常量數值不能修改。
- 常量定義后可以不使用。
- 常量定義不能使用簡短定義方式。
- 常量中使用的數據類型只能是 整型、布爾、浮點、復數類型、字符串類型。
5. iota特殊的常量
iota是常量里面的計數器,初始值默認值是0,可以被編譯器自動修改,每定義一組常量時,iota逐行自增1。
因為go中沒有像Java那樣的枚舉類型,因此我們可以通過iota來實現枚舉類型
const (Spring Mytype = iotaSummerAutumnWinter
)