Go 语言编程规范
1. gofmt 命令
大部分的格式問題可以通過 gofmt 來解決,gofmt 自動格式化代碼,保證所有的 go 代碼與官方推薦的格式保持一致,所有格式有關(guān)問題,都以gofmt的結(jié)果為準(zhǔn)。所以,建議在提交代碼庫之前先運行一下這個命令。
2. 行長
一行最長不超過80個字符,超過的使用換行展示,盡量保持格式優(yōu)雅。
3. 注釋
在編碼階段應(yīng)該同步寫好 變量、函數(shù)、包 的注釋,最后可以利用 godoc 命令導(dǎo)出文檔。注釋必須是完整的句子,句子的結(jié)尾應(yīng)該用句號作為結(jié)尾(英文句號)。注釋推薦用英文,可以在寫代碼過程中鍛煉英文的閱讀和書寫能力。而且用英文不會出現(xiàn)各種編碼的問題。
每個包都應(yīng)該有一個包注釋,一個位于 package 子句之前的塊注釋或行注釋。包如果有多個 go 文件,只需要出現(xiàn)在一個 go 文件中即可。
// ping包實現(xiàn)了常用的ping相關(guān)的函數(shù)package ping4. 命名
- 需要注釋來補充的命名就不算是好命名。
- 使用可搜索的名稱:單字母名稱和數(shù)字常量很難從一大堆文字中搜索出來。單字母名稱僅適用于短方法中的本地變量,名稱長短應(yīng)與其作用域相對應(yīng)。若變量或常量可能在代碼中多處使用,則應(yīng)賦其以便于搜索的名稱。
- 做有意義的區(qū)分:Product 和 ProductInfo 和 ProductData 沒有區(qū)別,NameString 和 Name 沒有區(qū)別,要區(qū)分名稱,就要以讀者能鑒別不同之處的方式來區(qū)分 。
- 函數(shù)命名規(guī)則:駝峰式命名,名字可以長但是得把功能,必要的參數(shù)描述清楚,函數(shù)名應(yīng)當(dāng)是動詞或動詞短語,如 postPayment、deletePage、save。并依 Javabean 標(biāo)準(zhǔn)加上 get、set、is前綴。例如:xxx + With + 需要的參數(shù)名 + And + 需要的參數(shù)名 + …..
- 結(jié)構(gòu)體命名規(guī)則:結(jié)構(gòu)體名應(yīng)該是名詞或名詞短語,如 Custome、WikiPage、Account、AddressParser,避免使用 Manager、Processor、Data、Info、這樣的類名,類名不應(yīng)當(dāng)是動詞。
- 包名命名規(guī)則:包名應(yīng)該為小寫單詞,不要使用下劃線或者混合大小寫。
- 接口命名規(guī)則:單個函數(shù)的接口名以”er”作為后綴,如 Reader,Writer。接口的實現(xiàn)則去掉“er”。
5. 常量
常量均需使用全部大寫字母組成,并使用下劃線分詞:
const APP_VER = "1.0"如果是枚舉類型的常量,需要先創(chuàng)建相應(yīng)類型:
type Scheme stringconst (HTTP Scheme = "http"HTTPS Scheme = "https")
6. 變量
變量命名基本上遵循相應(yīng)的英文表達或簡寫,在相對簡單的環(huán)境(對象數(shù)量少、針對性強)中,可以將一些名稱由完整單詞簡寫為單個字母,例如:
- user 可以簡寫為 u
- userID 可以簡寫 uid
- 若變量類型為 bool 類型,則名稱應(yīng)以 Has, Is, Can 或 Allow 開頭:
7. 變量命名慣例
變量名稱一般遵循駝峰法,但遇到特有名詞時,需要遵循以下規(guī)則:
- 如果變量為私有,且特有名詞為首個單詞,則使用小寫,如:apiClient
- 其它情況都應(yīng)當(dāng)使用該名詞原有的寫法,如 APIClient、repoID、UserID
- 錯誤示例:UrlArray,應(yīng)該寫成 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"8. struct規(guī)范
struct申明和初始化格式采用多行,定義如下:
type User struct{Username stringEmail string}初始化如下:
u := User{Username: "test",Email: "test@gmail.com",}9. panic
盡量不要使用panic,除非你知道你在做什么
10. import
對 import 的包進行分組管理,用換行符分割,而且標(biāo)準(zhǔn)庫作為分組的第一組。如果你的包引入了三種類型的包,標(biāo)準(zhǔn)庫包,程序內(nèi)部包,第三方包,建議采用如下方式進行組織你的包
package mainimport ("fmt""os""kmg/a""kmg/b""code.google.com/a""github.com/b" )goimports 會自動幫你格式化
11. 參數(shù)傳遞
- 對于少量數(shù)據(jù),不要傳遞指針
- 對于大量數(shù)據(jù)的 struct 可以考慮使用指針
- 傳入的參數(shù)是 map,slice,chan 不要傳遞指針,因為 map,slice,chan 是引用類型,不需要傳遞指針的指針
12. 單元測試
單元測試文件名命名規(guī)范:
example_test.go
測試用例的函數(shù)名稱必須以 Test 開頭,例如:
func TestExample
?
轉(zhuǎn)載于:https://www.cnblogs.com/liang1101/p/7719762.html
總結(jié)
- 上一篇: 步骤进度条 css
- 下一篇: Swift开发:NSLayoutCons