Golang 編碼規(guī)范

一陋葡、注釋

推薦使用C語言風格的 “//” 注釋。注釋必須是完整的句子彻采,盡量簡明腐缤,以句點結(jié)尾。
程序中每一個可被導出的(大寫的)類型肛响,都應該有一個注釋岭粤。
在編碼階段同步寫好變量,函數(shù)特笋,包注釋剃浇,就可以使用godoc生成文檔

1.1. 包

每個包都應該有一個包注釋,包如果有多個go文件猎物,就只需要在入口文件寫包注釋虎囚。
概況以 Package 開頭。

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is Governed by a BSD-style
// license that can be found in the LICENSE file.
 
// Package strings implements simple functions to manipulate strings.
package strings

1.2. 函數(shù)和結(jié)構(gòu)體

第一行寫概況蔫磨,并且使用被聲明的名字作為開頭淘讥。

// 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) {

// Request represents a request to run a command.
type Request struct { ...

二、命名

  • 使用短命名堤如,因為長名字并不會使得事物更易讀蒲列,文檔注釋會比格外長的名字更有用。
  • 需要導出的任何類型必須以大寫字母開頭搀罢。

2.1. 包名

包名應該為小寫單詞蝗岖,不要使用下劃線或者混合大小寫。

2.2. 變量

  • 全局變量:駝峰式榔至,可導出的使用大寫字母開頭
  • 參數(shù)傳遞:駝峰式抵赢,小寫字母開頭
  • 局部變量:下劃線風格命名

2.3. 接口

單函數(shù)的接口用 函數(shù)+“er” 命名,如:Reader唧取,Writer

type Reader interface {
        Read(p []byte) (n int, err error)
}

2個函數(shù)的接口铅鲤,組合命名

type WriteFlusher interface {
    Write([]byte) (int, error)
    Flush() error
}

3個以上函數(shù)的接口名,類似于結(jié)構(gòu)體名

type Car interface {
    Start([]byte)
    Stop() error
    Recover()
}

三兵怯、import

對標準包彩匕,程序內(nèi)部包,第三方包進行分組媒区。

import (
    "encoding/json"         //標準包
    "strings"

    "myproject/models"      //內(nèi)部包
    "myproject/utils"

    "github.com/go-sql-driver/mysql"    //第三方包
)

引用包時不要使用相對路徑驼仪。

// 這是不好的導入
import “../net”
 
// 這是正確的做法
import “github.com/repo/proj/src/net”

四掸犬、流程控制

4.1. if

if接受初始化語句,約定如下方式建立局部變量绪爸。

if err := file.Chmod(0664); err != nil {
    return err
}

4.2. for

采用短聲明建立局部變量湾碎。

for i := 0; i < 10; i++ {
}

4.3. range

如果只需要第一個 key,就省略第二個

for key := range array {
}

如果只需要第二個 value奠货,則丟棄第一個

for _, value := range array {
}

4.4. return

盡早return

f, err := os.Open(name)
if err != nil {
    return err
}
f.Close()
d, err := f.Stat()
if err != nil {
    return err
}
codeUsing(f, d)

五介褥、函數(shù)

  • 采用命名的多返回值,在godoc生成的文檔中递惋,帶有返回值的函數(shù)聲明更利于理解柔滔。
func nextInt(b []byte, pos int) (value, nextPos int, err error) {

六、錯誤處理

  • 不要在邏輯代碼中使用panic
  • error作為函數(shù)的值返回,必須對error進行處理
  • 錯誤描述如果是英文必須為小寫萍虽,不需要標點結(jié)尾
  • 采用獨立的錯誤流進行處理

不推薦:

if err != nil {
    // error handling
} else {
    // normal code
}

好的方式:

if err != nil {
    // error handling
    return // or continue, etc.
}
// normal code

如果返回值需要初始化睛廊,則采用下面的方式

x, err := f()
if err != nil {
    // error handling
    return
}
// use x

參考:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市杉编,隨后出現(xiàn)的幾起案子超全,更是在濱河造成了極大的恐慌,老刑警劉巖邓馒,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘶朱,死亡現(xiàn)場離奇詭異,居然都是意外死亡光酣,警方通過查閱死者的電腦和手機疏遏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挂疆,“玉大人改览,你說我怎么就攤上這事下翎$脱裕” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵视事,是天一觀的道長胆萧。 經(jīng)常有香客問我,道長俐东,這世上最難降的妖魔是什么跌穗? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮虏辫,結(jié)果婚禮上蚌吸,老公的妹妹穿的比我還像新娘疾就。我一直安慰自己倦青,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布健田。 她就那樣靜靜地躺著,像睡著了一般佩微。 火紅的嫁衣襯著肌膚如雪缝彬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天哺眯,我揣著相機與錄音谷浅,去河邊找鬼。 笑死奶卓,一個胖子當著我的面吹牛一疯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播夺姑,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼违施,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瑟幕?” 一聲冷哼從身側(cè)響起磕蒲,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎只盹,沒想到半個月后辣往,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡殖卑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年站削,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孵稽。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡许起,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出菩鲜,到底是詐尸還是另有隱情园细,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布接校,位于F島的核電站猛频,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛛勉。R本人自食惡果不足惜鹿寻,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诽凌。 院中可真熱鬧毡熏,春花似錦、人聲如沸侣诵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疯暑,卻和暖如春训柴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背妇拯。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工幻馁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人越锈。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓仗嗦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親甘凭。 傳聞我的和親對象是個殘疾皇子稀拐,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • gofmt 大部分的格式問題可以通過gofmt解決,gofmt自動格式化代碼丹弱,保證所有的go代碼與官方推薦的格式保...
    莫云溪閱讀 9,666評論 2 16
  • gofmt 大部分的格式問題可以通過gofmt解決德撬,gofmt自動格式化代碼,保證所有的go代碼一致的格式躲胳。 正常...
    土豆_大大閱讀 962評論 0 51
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蜓洪,服務(wù)發(fā)現(xiàn),斷路器坯苹,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • Android編碼規(guī)范 源文件基礎(chǔ) 文件名 源文件以其最頂層的類名來命名隆檀,大小寫敏感,文件擴展名為.java粹湃。 文...
    呼呼哥閱讀 941評論 0 0
  • 把風揉進林中 隱約間樹影重重 讓夜色鉆入海里 惹得一陣漣漪 火車去擁抱鐵軌 汽笛從靜穆中悠回 我自小巷子離開 卻總...
    言又止1閱讀 231評論 0 0