欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語(yǔ)言開(kāi)發(fā)編程規(guī)范命令風(fēng)格代碼格式

 更新時(shí)間:2022年06月14日 11:32:06   作者:王中陽(yáng)Go  
這篇文章主要為大家介紹了Go語(yǔ)言開(kāi)發(fā)編程規(guī)范命令風(fēng)格代碼格式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

今天這篇文章是站在巨人的肩膀上,匯總了目前主流的開(kāi)發(fā)規(guī)范,同時(shí)結(jié)合Go語(yǔ)言的特點(diǎn),以及自己的項(xiàng)目經(jīng)驗(yàn)總結(jié)出來(lái)的:爆肝分享兩千字Go編程規(guī)范。

后續(xù)還會(huì)更新更多優(yōu)雅的規(guī)范。

命名風(fēng)格

1. 【強(qiáng)制】代碼中的命名均不能以下劃線或美元符號(hào)開(kāi)始,也不能以下劃線或美元符號(hào)結(jié)束。 

反 例 : 

_name / __name / $name / name_ / name$ / name__  

2. 【強(qiáng)制】代碼中的命名嚴(yán)禁使用拼音與英文混合的方式,更不允許直接使用中文的方式。 

說(shuō)明:正確的英文拼寫(xiě)和語(yǔ)法可以讓閱讀者易于理解,避免歧義。

注意,純拼音命名方式更要避免采用。 

正例:

renminbi / alibaba / taobao / youku / hangzhou

等國(guó)際通用的名稱(chēng),可視同英文。

反 例 :

DaZhePromotion [ 打 折 ] / getPingfenByName() [評(píng)分] / int某變量 = 3

3. 【強(qiáng)制】公用的變量、類(lèi)型、接口、結(jié)構(gòu)、函數(shù)以及結(jié)構(gòu)體的成員變量等命名使用UpperCamelCase風(fēng)格。

正例:

GolangStruct / UserDO / XmlService / TcpUdpDeal / TaPromotion

反例:

Golangstruct / UserDo / XMLService / TCPUDPDeal / TAPromotion

4. 【強(qiáng)制】私有的變量、類(lèi)型、接口、結(jié)構(gòu)、函數(shù) 以 及 參 數(shù) 名 、 局 部 變 量 都 統(tǒng) 一 使 用 lowerCamelCase 風(fēng)格,必須遵從駝峰形式。

正 例 :

localValue / getHttpMessage() / inputUserId

5. 【強(qiáng)制】常量命名命名使用 UpperCamelCase 風(fēng)格,并使用 const 聲明,力求語(yǔ)義表達(dá)完整 清楚,不要嫌名長(zhǎng)。

正例:

const StatusOK = 200

6. 抽象結(jié)構(gòu)命名使用 Abstract 或 Base 開(kāi)頭; 異常類(lèi)命名使用 Err 結(jié)尾; 測(cè)試類(lèi)命名以 Test 開(kāi)頭,以它要測(cè)試的函數(shù)的 名稱(chēng)結(jié)尾。

正 例 :

 ParamsErr := errors.New(“params err”)

7. 接口命名規(guī)范一般使用 er 結(jié)尾:?jiǎn)蝹€(gè)函數(shù)的接口名以“er”作為后綴,接口的實(shí)現(xiàn)則去掉 er; 兩個(gè)函數(shù)的接口名綜合兩個(gè)函數(shù)名,以 er 作為 后綴,接口的實(shí)現(xiàn)則去掉 er ; 三個(gè)以上函數(shù)的接口,抽象這個(gè)接口的功能,類(lèi)似于結(jié)構(gòu)體命名。

8. 【強(qiáng)制】數(shù)據(jù)和切片類(lèi)型命名以 Arr 結(jié)尾,map 類(lèi)型以 Map 結(jié)尾。相同功用的結(jié)構(gòu)體可以根據(jù)功能采 用相同的結(jié)尾, Api 請(qǐng)求以 Req 結(jié)尾, 相應(yīng)以 Res 結(jié)尾,數(shù)據(jù)結(jié)構(gòu)體以 xxxModel 結(jié)尾, xxx 即為數(shù)據(jù)表名。

正例:

var userArr [3]string / type LoginReq struct{} / type UserDO struct{}

9. 【強(qiáng)制】返回結(jié)果主要為布爾類(lèi)型的函數(shù),函數(shù)名可以 is、has 等開(kāi)頭

10. 【強(qiáng)制】工程名統(tǒng)一使用小寫(xiě),單詞之間使 用 - 分割。包目錄名一律使用小寫(xiě),盡量采用一 個(gè)單詞命名,單詞間不用符號(hào)分割,統(tǒng)一使用單 數(shù)形式,但是結(jié)構(gòu)體名如果有復(fù)數(shù)含義,結(jié)構(gòu)體 名可以使用復(fù)數(shù)形式。包目錄下的包名( package namepackage ),如非 main 函數(shù),和包目錄名保持一直且單詞間用 _ 分隔,測(cè)試文件以 _test 結(jié) 尾。

正 例 :

 db-utils / package db_utils / package db_utils_test

反例:

services

11. 為了達(dá)到代碼自解釋的目標(biāo),任何自定義編程元 素在命名時(shí),使用盡量完整的單詞組合來(lái)表達(dá)其意。反例:var a int 的隨意命名方式。

12. 在常量與變量的命名時(shí),表示類(lèi)型的名詞放在詞尾,以提升辨識(shí)度。如規(guī)范【8】所示。

正例:

startTime / startDate

反例:

startedAt / startDt

13.如果模塊、接口、類(lèi)、方法使用了設(shè)計(jì)模式,在命名時(shí)需體現(xiàn)出具體模式。

說(shuō)明:將設(shè)計(jì)模式體現(xiàn)在名字中,有利于閱讀者 快速理解架構(gòu)設(shè)計(jì)理念。

代碼格式

1. 【強(qiáng)制】如果是大括號(hào)內(nèi)為空,則簡(jiǎn)潔地寫(xiě)成{} 即可,大括號(hào)中間無(wú)需換行和空格;如果是非空 代碼塊則: 1) 左大括號(hào)前不換行。 2) 左大括號(hào)后換行。 3) 右大括號(hào)前換行。 4) 右大括號(hào)后還有 else 等代碼則不換行;表 示終止的右大括號(hào)后必須換行。

2. 【強(qiáng)制】左小括號(hào)和字符之間不出現(xiàn)空格;同樣, 右小括號(hào)和字符之間也不出現(xiàn)空格;而左大括號(hào) 前需要空格。 反例:if (空格 a == b 空格)

3. 【強(qiáng)制】if / for / switch 等保留字與括號(hào)之間都必 須加空格。

4. 【強(qiáng)制】任何二目、三目運(yùn)算符的左右兩邊都需 要加一個(gè)空格。 說(shuō)明:運(yùn)算符包括賦值運(yùn)算符= 、邏輯運(yùn)算符&&、 加減乘除符號(hào)等。

5. 【強(qiáng)制】采用 tab 字符縮進(jìn),寬度設(shè)置為 4 個(gè) 空格

6. 【強(qiáng)制】單行字符數(shù)限制不超過(guò) 120 個(gè),超出 需要換行,換行時(shí)遵循如下原則:

  • 第二行相對(duì)第一行縮進(jìn)一個(gè) tab,從第三行 開(kāi)始,不再繼續(xù)縮進(jìn)。
  • 運(yùn)算符與上文一起作為結(jié)尾。
  • 方法調(diào)用的點(diǎn)符號(hào)與上文一起作為結(jié)尾。
  • 方法調(diào)用中的多個(gè)參數(shù)需要換行時(shí),在逗號(hào) 后進(jìn)行。
  • 在括號(hào)前不要換行

7.【強(qiáng)制】函數(shù)參數(shù)在定義和傳入時(shí),多個(gè)參數(shù)逗 號(hào)后邊必須加空格。

控制語(yǔ)句

1.【強(qiáng)制】在一個(gè) switch 塊內(nèi),每個(gè) case 無(wú)需聲 明 break 來(lái) 終 止 , 如 果 想 順 序 執(zhí) 行 使 用 fallthrough ;在一個(gè) switch 塊內(nèi),都必須包含 一個(gè) default 語(yǔ)句并且放在最后,即使它什么代 碼也沒(méi)有。

2.【強(qiáng)制】在高并發(fā)場(chǎng)景中,避免使用”等于”判 斷作為中斷或退出的條件。 說(shuō)明:如果并發(fā)控制沒(méi)有處理好,容易產(chǎn)生等值 判斷被“擊穿”的情況,使用大于或小于的區(qū)間 判斷條件來(lái)代替。 反例:判斷剩余獎(jiǎng)品數(shù)量等于 0 時(shí),終止發(fā)放 獎(jiǎng)品,但因?yàn)椴l(fā)處理錯(cuò)誤導(dǎo)致獎(jiǎng)品數(shù)量瞬間變成了負(fù)數(shù), 這樣的話,活動(dòng)無(wú)法終止。

3.【推薦】表達(dá)異常的分支時(shí),少用 if-else 方式, 這種方式可以改寫(xiě)成:

if condition { … return obj; } // 接著寫(xiě) else 的業(yè)務(wù)邏輯代碼;

說(shuō)明:如果非使用 if()…else if()…else…方式表 達(dá)邏輯,避免后續(xù)代碼維護(hù)困難,

【強(qiáng)制】請(qǐng)勿 超過(guò) 3 層。

正例:超過(guò) 3 層的 if-else 的邏輯判斷代碼可 以使用衛(wèi)語(yǔ)句、策略模式、狀態(tài)模式等來(lái)實(shí)現(xiàn), 其中衛(wèi)語(yǔ)句即代碼邏輯先考慮失敗、異常、中斷、 退出等直接返回的情況,以方法多個(gè)出口的方 式,解決代碼中判斷分支嵌套的問(wèn)題,這是逆向 思維的體現(xiàn)。

4. 【參考】下列情形,需要進(jìn)行參數(shù)校驗(yàn):

  • 調(diào)用頻次低的方法。
  • 執(zhí)行時(shí)間開(kāi)銷(xiāo)很大的方法。此情形中,參數(shù) 校驗(yàn)時(shí)間幾乎可以忽略不計(jì),但如果因?yàn)閰?shù)錯(cuò) 誤導(dǎo)致中間執(zhí)行回退,或者錯(cuò)誤,那得不償失。
  • 需要極高穩(wěn)定性和可用性的方法。
  • 對(duì) 外 提 供 的 開(kāi) 放 接 口 , 不 管 是 RPC/API/HTTP 接口。
  • 敏感權(quán)限入口。

5. 【參考】下列情形,不需要進(jìn)行參數(shù)校驗(yàn):

  • 極有可能被循環(huán)調(diào)用的方法。但在方法說(shuō)明 里必須注明外部參數(shù)檢查要求。
  • 底層調(diào)用頻度比較高的方法。畢竟是像純凈 水過(guò)濾的最后一道,參數(shù)錯(cuò)誤不太可能到底層才 會(huì)暴露問(wèn)題。一般 DAO 層與 Service 層都在 同一個(gè)應(yīng)用中,部署在同一臺(tái)服務(wù)器中,所以 DAO 的參數(shù)校驗(yàn),可以省略。

雜項(xiàng)

1. 【強(qiáng)制】在使用正則表達(dá)式時(shí),利用好其預(yù)編譯 功能,可以有效加快正則匹配速度。

 正例:

 // 預(yù)編譯當(dāng)前正則表達(dá)式re, _ := regexp.Compile("^hel+o") // 是否匹配指定字符串 isMatch := re.MatchString(“hello world”)

2. 【推薦】及時(shí)清理不再使用的代碼段或配置信息。 說(shuō)明:對(duì)于垃圾代碼或過(guò)時(shí)配置,堅(jiān)決清理干凈, 避免程序過(guò)度臃腫,代碼冗余。 正例:對(duì)于暫時(shí)被注釋掉,后續(xù)可能恢復(fù)使用的 代碼片斷,在注釋代碼上方,統(tǒng)一規(guī)定使用三個(gè) 斜杠(///)來(lái)說(shuō)明注釋掉代碼的理由。

異常日志

1. 【強(qiáng)制】使用控制流機(jī)制應(yīng)對(duì)錯(cuò)誤,通過(guò)從函數(shù) 返回錯(cuò)誤作為附加返回值來(lái)指示錯(cuò)誤,如果函數(shù) 有多個(gè)返回值,習(xí)慣上將錯(cuò)誤值作為最后一個(gè)結(jié) 果返回。如果錯(cuò)誤只有一種情況,結(jié)果通常設(shè)置為布爾類(lèi)型。nil 值表示沒(méi)有錯(cuò)誤。 正例:res, err := somepkgAction()

2. 【強(qiáng)制】對(duì)于總是成功返回的函數(shù),不必返回錯(cuò)誤。

3. 【強(qiáng)制】錯(cuò)誤信息的首字母小寫(xiě)且避免換行

更多

還會(huì)更新更多優(yōu)雅的規(guī)范實(shí)踐...

沒(méi)有規(guī)矩不成方圓,團(tuán)隊(duì)開(kāi)發(fā)中只有嚴(yán)格按照規(guī)范進(jìn)行,才能避免開(kāi)發(fā)一時(shí)爽,維護(hù)火葬場(chǎng)的困頓局面~

以上就是Go語(yǔ)言開(kāi)發(fā)編程規(guī)范命令風(fēng)格代碼格式的詳細(xì)內(nèi)容,更多關(guān)于Go編程規(guī)范命令風(fēng)格代碼格式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang開(kāi)發(fā)命令行之flag包的使用方法

    Golang開(kāi)發(fā)命令行之flag包的使用方法

    這篇文章主要介紹Golang開(kāi)發(fā)命令行及flag包的使用方法,日常命令行操作,相對(duì)應(yīng)的眾多命令行工具是提高生產(chǎn)力的必備工具,本文圍繞該內(nèi)容展開(kāi)話題,需要的朋友可以參考一下
    2021-10-10
  • GoLang實(shí)現(xiàn)日志收集器流程講解

    GoLang實(shí)現(xiàn)日志收集器流程講解

    這篇文章主要介紹了GoLang實(shí)現(xiàn)日志收集器流程,看日志是開(kāi)發(fā)者平時(shí)排查BUG所必須的掌握的技能,但是日志冗雜,所以寫(xiě)個(gè)小工具來(lái)收集這些日志幫助我們排查BUG,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • 解決golang結(jié)構(gòu)體tag編譯錯(cuò)誤的問(wèn)題

    解決golang結(jié)構(gòu)體tag編譯錯(cuò)誤的問(wèn)題

    這篇文章主要介紹了解決golang結(jié)構(gòu)體tag編譯錯(cuò)誤的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • Go語(yǔ)言中多字節(jié)字符的處理方法詳解

    Go語(yǔ)言中多字節(jié)字符的處理方法詳解

    這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言中多字節(jié)字符的處理方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • VSCode配置Go插件和第三方拓展包的詳細(xì)教程

    VSCode配置Go插件和第三方拓展包的詳細(xì)教程

    這篇文章主要介紹了VSCode配置Go插件和第三方拓展包的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • golang?gorm錯(cuò)誤處理事務(wù)以及日志用法示例

    golang?gorm錯(cuò)誤處理事務(wù)以及日志用法示例

    這篇文章主要為大家介紹了golang?gorm錯(cuò)誤處理事務(wù)以及日志用法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Golang AGScheduler動(dòng)態(tài)持久化任務(wù)調(diào)度的強(qiáng)大庫(kù)使用實(shí)例

    Golang AGScheduler動(dòng)態(tài)持久化任務(wù)調(diào)度的強(qiáng)大庫(kù)使用實(shí)例

    這篇文章主要為大家介紹了Golang AGScheduler動(dòng)態(tài)持久化任務(wù)調(diào)度的強(qiáng)大庫(kù)使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Go語(yǔ)言多值替換的HTML模板實(shí)例分析

    Go語(yǔ)言多值替換的HTML模板實(shí)例分析

    這篇文章主要介紹了Go語(yǔ)言多值替換的HTML模板,實(shí)例分析了Go語(yǔ)言多值替換與數(shù)組迭代的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 深入理解go slice結(jié)構(gòu)

    深入理解go slice結(jié)構(gòu)

    這篇文章主要介紹了go slice結(jié)構(gòu),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-09-09
  • Go語(yǔ)言字符串高效拼接的實(shí)現(xiàn)

    Go語(yǔ)言字符串高效拼接的實(shí)現(xiàn)

    這篇文章主要介紹了Go語(yǔ)言字符串高效拼接的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02

最新評(píng)論