golang編碼規範
gofmt
大部分的格式問題可以通過gofmt解決,gofmt自動格式化**,保證所有的go**一致的格式。
正常情況下,採用sublime編寫go**時,外掛程式gosublilme已經呼叫gofmt對**實現了格式化。
注釋 在編碼階段同步寫好變數、函式、包注釋,注釋可以通過godoc匯出生成文件。
注釋必須是完整的句子,以需要注釋的內容作為開頭,句點作為結尾。
程式中每乙個被匯出的(大寫的)名字,都應該有乙個文件注釋。
包注釋
每個程式包都應該有乙個包注釋,乙個位於package子句之前的塊注釋或行注釋。
包如果有多個go檔案,只需要出現在乙個go檔案中即可。
//package regexp implements a ****** library
//for regular expressions.
package regexp
可匯出型別
第一條語句應該為一條概括語句,並且使用被宣告的名字作為開頭。
// compile parses a regular expression and returns, if successful, a regexp
// object that can be used to match against text.
func compile(str string) (regexp *regexp, err error)
兩個函式的介面名綜合兩個函式名
type writeflusher inte***ce
三個以上函式的介面名,類似於結構體名
type car inte***ce
混合大小寫
採用駝峰式命名
mixedcaps 大寫開頭,可匯出
mixedcaps 小寫開頭,不可匯出
變數 全域性變數:駝峰式,結合是否可匯出確定首字母大小寫
引數傳遞:駝峰式,小寫字母開頭
區域性變數:下劃線形式
控制結構
if if接受初始化語句,約定如下方式建立區域性變數
if err := file.chmod(0664); err != nil
for
採用短宣告建立區域性變數
sum := 0
for i := 0; i < 10; i++
range
如果只需要第一項(key),就丟棄第二個:
for key := range m
} 如果只需要第二項,則把第一項置為下劃線
sum := 0
for _, value := range array
return
盡早return:一旦有錯誤發生,馬上返回
f, err := os.open(name)
if err != nil
d, err := f.stat()
if err != nil
codeusing(f, d)
函式(必須)
函式採用命名的多值返回
傳入變數和返回變數以小寫字母開頭
func nextint(b byte, pos int) (value, nextpos int) else 而要採用下面的方式
if err != nil
// normal code
如果返回值需要初始化,則採用下面的方式
x, err := f()
if err != nil
// use x
panic
盡量不要使用panic,除非你知道你在做什麼
import
對import的包進行分組管理,而且標準庫作為第一組
goimports實現了自動格式化
縮寫 採用全部大寫或者全部小寫來表示縮寫單詞
比如對於url這個單詞,不要使用
urlpony
而要使用
urlpony 或者 urlpony
引數傳遞
對於少量資料,不要傳遞指標
對於大量資料的struct可以考慮使用指標
傳入引數是map,slice,chan不要傳遞指標
因為map,slice,chan是引用型別,不需要傳遞指標的指標
接受者
名稱 統一採用單字母』p』而不是this,me或者self
type t struct{}
func (p *t)get(){}
型別
對於go初學者,接受者的型別如果不清楚,統一採用指標型
func (p *t)get(){}
而不是func (p t)get(){}
在某些情況下,出於效能的考慮,或者型別本來就是引用型別,有一些特例
如果接收者是map,slice或者chan,不要用指標傳遞
//map
package main
import (
「fmt」
)type mp map[string]string
func (m mp) set(k, v string)
func main()
//channel
package main
import (
「fmt」
)type ch chan inte***ce{}
func (c ch) push(i inte***ce{})
func (c ch) pop() inte***ce{}
func main()
如果需要對slice進行修改,通過返回值的方式重新賦值
//slice
package main
import (
「fmt」
)type slice byte
func main()
如果接收者是含有sync.mutex或者類似同步欄位的結構體,必須使用指標傳遞避免複製
package main
import (
「sync」
)type t struct
func (t *t) lock()
/* wrong !!!
func (t t) lock()
*/func main()
如果接收者是大的結構體或者陣列,使用指標傳遞會更有效率。
package main
import (
「fmt」
)type t struct
func (t *t) get() byte
func main()
Golang編碼規範
一行最長不超過80個字元,超過的使用換行展示,盡量保持格式優雅。注釋 在編碼階段應該同步寫好變數 函式 包的注釋,最後可以利用godoc匯出文件。注釋必須是完整的句子,句子的結尾應該用句號作為結尾 英文句號 注釋推薦用英文,可以在寫 過程中鍛鍊英文的閱讀和書寫能力。而且用英文不會出現各種編碼的問題。...
golang編碼規範
目錄 golang編碼規範 gofmt 注釋命名 控制結構 函式 必須 錯誤處理 panic import 縮寫引數傳遞 接受者golang編碼規範 注 此文件參考官方指南effective golang和golang code review comments進行整理,力圖與官方及社群編碼風格保持一...
php 編碼規範哪些 php編碼規範
1.php 必須以完整的形式來定界 即不要使用php 短標籤 且保證在關閉標籤後不要有任何空格。2.當乙個字串是純文字組成的時候 即不含有變數 則必須總是以單引號 作為定界符。例如 a example string 3.變數替換中的變數只允許用 變數名 的形式。例如 greeting hello n...