大部分的格式問題能夠經過 gofmt 來解決,gofmt 自動格式化代碼,保證全部的 go 代碼與官方推薦的格式保持一致,全部格式有關問題,都以gofmt的結果爲準。因此,建議在提交代碼庫以前先運行一下這個命令。git
一行最長不超過80個字符,超過的使用換行展現,儘可能保持格式優雅。github
在編碼階段應該同步寫好 變量、函數、包 的註釋,最後能夠利用 godoc 命令導出文檔。註釋必須是完整的句子,句子的結尾應該用句號做爲結尾(英文句號)。註釋推薦用英文,能夠在寫代碼過程當中鍛鍊英文的閱讀和書寫能力。並且用英文不會出現各類編碼的問題。api
每一個包都應該有一個包註釋,一個位於 package 子句以前的塊註釋或行註釋。包若是有多個 go 文件,只須要出如今一個 go 文件中便可。bash
// ping包實現了經常使用的ping相關的函數
package ping
複製代碼
須要註釋來補充的命名就不算是好命名。 使用可搜索的名稱:單字母名稱和數字常量很難從一大堆文字中搜索出來。 單字母名稱僅適用於短方法中的本地變量,名稱長短應與其做用域相對應。 若變量或常量可能在代碼中多處使用,則應賦其以便於搜索的名稱。markdown
作有意義的區分:Product 和 ProductInfo 和 ProductData 沒有區別, NameString 和 Name 沒有區別,要區分名稱,就要以讀者能鑑別不一樣之處的方式來區分 。函數
函數命名規則:駝峯式命名,名字能夠長可是得把功能,必要的參數描述清楚,
函數名應當是動詞或動詞短語,如 postPayment、deletePage、save。
並依 Javabean 標準加上 get、set、is前綴。
例如:xxx + With + 須要的參數名 + And + 須要的參數名 + …..
結構體命名規則:結構體名應該是名詞或名詞短語,
如 Custome、WikiPage、Account、AddressParser,避免使用Manager、Processor、Data、Info、
這樣的類名,類名不該當是動詞。
包名命名規則:包名應該爲小寫單詞,不要使用下劃線或者混合大小寫。
接口命名規則:單個函數的接口名以」er」做爲後綴,如 Reader,Writer。接口的實現則去掉「er」。
複製代碼
複製代碼
type Reader interface { Read(p []byte) (n int, err error) } // 多個函數接口 type WriteFlusher interface { Write([]byte) (int, error) Flush() error } 複製代碼
常量均需使用所有大寫字母組成,並使用下劃線分詞:post
const APP_VER = "1.0" // 若是是枚舉類型的常量,須要先建立相應類型: type Scheme string const ( HTTP Scheme = "http" HTTPS Scheme = "https" ) 複製代碼
變量命名基本上遵循相應的英文表達或簡寫,在相對簡單的環境(對象數量少、針對性強)中, 能夠將一些名稱由完整單詞簡寫爲單個字母,例如:單元測試
user 能夠簡寫爲 u
userID 能夠簡寫 uid
// 若變量類型爲 bool 類型,則名稱應以 Has, Is, Can 或 Allow 開頭:
var isExist bool
var hasConflict bool
var canManage bool
var allowGitHook bool
複製代碼
變量名稱通常遵循駝峯法,但遇到特有名詞時,須要遵循如下規則:測試
若是變量爲私有,且特有名詞爲首個單詞,則使用小寫,ui
如:apiClient其它狀況都應當使用該名詞原有的寫法,
如 APIClient、repoID、UserID 錯誤示例:UrlArray,應該寫成 urlArray 或者 URLArray
//下面列舉了一些常見的特有名詞: "API","ASCII","CPU","CSS","DNS","EOF",GUID","HTML","HTTP", "HTTPS","ID","IP","JSON","LHS","QPS","RAM","RHS" "RPC", "SLA", "SMTP","SSH","TLS","TTL","UI","UID","UUID","URI","URL", "UTF8", "VM","XML","XSRF","XSS" 複製代碼
struct申明和初始化格式採用多行,定義以下:
type User struct{
Username string
Email string
}
初始化以下:
u := User{
Username: "test",
Email: "test@gmail.com",
}
複製代碼
儘可能不要使用panic,除非你知道你在作什麼
對 import 的包進行分組管理,用換行符分割,並且標準庫做爲分組的第一組。 若是你的包引入了三種類型的包,標準庫包,程序內部包,第三方包, 建議採用以下方式進行組織你的包
複製代碼 package main import ( "fmt" "os" "kmg/a" "kmg/b" "code.google.com/a" "github.com/b" ) 複製代碼 goimports 會自動幫你格式化 複製代碼
對於少許數據,不要傳遞指針 對於大量數據的 struct 能夠考慮使用指針 傳入的參數是 map,slice,chan 不要傳遞指針, 由於 map,slice,chan 是引用類型,不須要傳遞指針的指針
單元測試文件名命名規範:
example_test.go
測試用例的函數名稱必須以 Test 開頭,例如:
func TestExample
複製代碼