Golang編碼規範

2021-07-26 03:50:18 字數 3594 閱讀 8270

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...