Go語(yǔ)言中編碼規(guī)范的使用方法

這篇文章主要講解了Go語(yǔ)言中編碼規(guī)范的使用方法,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。

創(chuàng)新互聯(lián)公司專(zhuān)業(yè)為企業(yè)提供靜安網(wǎng)站建設(shè)、靜安做網(wǎng)站、靜安網(wǎng)站設(shè)計(jì)、靜安網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、靜安企業(yè)網(wǎng)站模板建站服務(wù),十余年靜安做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

每個(gè)語(yǔ)言都有自己特色的編碼規(guī)范,學(xué)習(xí)該語(yǔ)言的命名規(guī)范,能讓你寫(xiě)出來(lái)的代碼更加易讀,更加不容易出現(xiàn)一些低級(jí)錯(cuò)誤。

本文根據(jù)個(gè)人編碼習(xí)慣以及網(wǎng)絡(luò)上的一些文章,整理了一些大家能用上的編碼規(guī)范,可能是一些主流方案,但不代表官方,這一點(diǎn)先聲明一下。

1. 文件命名

由于 Windows平臺(tái)文件名不區(qū)分大小寫(xiě),所以文件名應(yīng)一律使用小寫(xiě)

不同單詞之間用下劃線(xiàn)分詞,不要使用駝峰式命名

如果是測(cè)試文件,可以以 _test.go 結(jié)尾

文件若具有平臺(tái)特性,應(yīng)以 文件名_平臺(tái).go 命名,比如 utils_ windows.go,utils_linux.go,可用的平臺(tái)有:windows, unix, posix, plan9, darwin, bsd, linux, freebsd, nacl, netbsd, openbsd, solaris, dragonfly, bsd, notbsd, android,stubs

一般情況下應(yīng)用的主入口應(yīng)為 main.go,或者以應(yīng)用的全小寫(xiě)形式命名。比如MyBlog 的入口可以為 myblog.go

2. 常量命名

目前在網(wǎng)絡(luò)上可以看到主要有兩種風(fēng)格的寫(xiě)法

第一種是駝峰命名法,比如 appVersion

第二種使用全大寫(xiě)且用下劃線(xiàn)分詞,比如 APP_VERSION

這兩種風(fēng)格,沒(méi)有孰好孰弱,可自由選取,我個(gè)人更傾向于使用第二種,主要是能一眼與變量區(qū)分開(kāi)來(lái)。

如果要定義多個(gè)變量,請(qǐng)使用 括號(hào) 來(lái)組織。

const (
  APP_VERSION = "0.1.0"
 CONF_PATH = "/etc/xx.conf"
)

3. 變量命名

和常量不同,變量的命名,開(kāi)發(fā)者們的喜好就比較一致了,統(tǒng)一使用 駝峰命名法

  1. 在相對(duì)簡(jiǎn)單的環(huán)境(對(duì)象數(shù)量少、針對(duì)性強(qiáng))中,可以將完整單詞簡(jiǎn)寫(xiě)為單個(gè)字母,例如:user寫(xiě)為u
  2. 若該變量為 bool 類(lèi)型,則名稱(chēng)應(yīng)以 Has, Is, Can 或 Allow 開(kāi)頭。例如:isExist ,hasConflict 。
  3. 其他一般情況下首單詞全小寫(xiě),其后各單詞首字母大寫(xiě)。例如:numShips 和 startDate 。
  4. 若變量中有特有名詞(以下列出),且變量為私有,則首單詞還是使用全小寫(xiě),如 apiClient。
  5. 若變量中有特有名詞(以下列出),但變量不是私有,那首單詞就要變成全大寫(xiě)。例如:APIClient,URLString

這里列舉了一些常見(jiàn)的特有名詞:

// A GonicMapper that contains a list of common initialisms taken from golang/lint
var LintGonicMapper = GonicMapper{
  "API":  true,
  "ASCII": true,
  "CPU":  true,
  "CSS":  true,
  "DNS":  true,
  "EOF":  true,
  "GUID": true,
  "HTML": true,
  "HTTP": true,
  "HTTPS": true,
  "ID":  true,
  "IP":  true,
  "JSON": true,
  "LHS":  true,
  "QPS":  true,
  "RAM":  true,
  "RHS":  true,
  "RPC":  true,
  "SLA":  true,
  "SMTP": true,
  "SSH":  true,
  "TLS":  true,
  "TTL":  true,
  "UI":  true,
  "UID":  true,
  "UUID": true,
  "URI":  true,
  "URL":  true,
  "UTF8": true,
  "VM":  true,
  "XML":  true,
  "XSRF": true,
  "XSS":  true,
}

4. 函數(shù)命名

  1. 函數(shù)名還是使用 駝峰命名法
  2. 但是有一點(diǎn)需要注意,在 Golang 中是用大小寫(xiě)來(lái)控制函數(shù)的可見(jiàn)性,因此當(dāng)你需要在包外訪(fǎng)問(wèn),請(qǐng)使用 大寫(xiě)字母開(kāi)頭
  3. 當(dāng)你不需要在包外訪(fǎng)問(wèn),請(qǐng)使用小寫(xiě)字母開(kāi)頭

另外,函數(shù)內(nèi)部的參數(shù)的排列順序也有幾點(diǎn)原則

  1. 參數(shù)的重要程度越高,應(yīng)排在越前面
  2. 簡(jiǎn)單的類(lèi)型應(yīng)優(yōu)先復(fù)雜類(lèi)型
  3. 盡可能將同種類(lèi)型的參數(shù)放在相鄰位置,則只需寫(xiě)一次類(lèi)型
     

5. 接口命名

使用駝峰命名法,可以用 type alias 來(lái)定義大寫(xiě)開(kāi)頭的 type 給包外訪(fǎng)問(wèn)。

type helloWorld interface {
  func Hello();
}

type SayHello helloWorld

當(dāng)你的接口只有一個(gè)函數(shù)時(shí),接口名通常會(huì)以 er 為后綴

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

5. 注釋規(guī)范

注釋分為

5.1 包注釋

位于 package 之前,如果一個(gè)包有多個(gè)文件,只需要在一個(gè)文件中編寫(xiě)即可
如果你想在每個(gè)文件中的頭部加上注釋?zhuān)枰诎鏅?quán)注釋和 Package前面加一個(gè)空行,否則版權(quán)注釋會(huì)作為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 net

如果是特別復(fù)雜的包,可單獨(dú)創(chuàng)建 doc.go 文件說(shuō)明

5.2 代碼注釋

用于解釋代碼邏輯,可以有兩種寫(xiě)法

單行注釋使用 // ,多行注釋使用 /* comment */

// 單行注釋

/*
多
行
注
釋
*/

另外,對(duì)于代碼注釋還有一些更加苛刻的要求,這個(gè)看個(gè)人了,摘自網(wǎng)絡(luò):

所有導(dǎo)出對(duì)象都需要注釋說(shuō)明其用途;非導(dǎo)出對(duì)象根據(jù)情況進(jìn)行注釋。
如果對(duì)象可數(shù)且無(wú)明確指定數(shù)量的情況下,一律使用單數(shù)形式和一般進(jìn)行時(shí)描述;否則使用復(fù)數(shù)形式。
包、函數(shù)、方法和類(lèi)型的注釋說(shuō)明都是一個(gè)完整的句子。
句子類(lèi)型的注釋首字母均需大寫(xiě);短語(yǔ)類(lèi)型的注釋首字母需小寫(xiě)。
注釋的單行長(zhǎng)度不能超過(guò) 80 個(gè)字符。
類(lèi)型的定義一般都以單數(shù)形式描述:

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

如果為接口,則一般以以下形式描述:

 // FileInfo is the interface that describes a file and is returned by Stat and Lstat.
 type FileInfo interface { ...

函數(shù)與方法的注釋需以函數(shù)或方法的名稱(chēng)作為開(kāi)頭:

// Post returns *BeegoHttpRequest with POST method.

如果一句話(huà)不足以說(shuō)明全部問(wèn)題,則可換行繼續(xù)進(jìn)行更加細(xì)致的描述:

 // Copy copies file from source to target path.
 // It returns false and error when error occurs in underlying function calls.

若函數(shù)或方法為判斷類(lèi)型(返回值主要為 bool 類(lèi)型),則以 <name> returns true if 開(kāi)頭:

 // HasPrefix returns true if name has any string in given slice as prefix.
 func HasPrefix(name string, prefixes []string) bool { ...

5.3 特別注釋

  • TODO:提醒維護(hù)人員此部分代碼待完成
  • FIXME:提醒維護(hù)人員此處有BUG待修復(fù)
  • NOTE:維護(hù)人員要關(guān)注的一些問(wèn)題說(shuō)明

6. 包的導(dǎo)入

單行的包導(dǎo)入

import "fmt"

多個(gè)包導(dǎo)入,請(qǐng)使用 {} 來(lái)組織

import {
 "fmt"
 "os"
}

另外根據(jù)包的來(lái)源,對(duì)排版還有一定的要求

標(biāo)準(zhǔn)庫(kù)排最前面,第三方包次之、項(xiàng)目?jī)?nèi)的其它包和當(dāng)前包的子包排最后,每種分類(lèi)以一空行分隔。
盡量不要使用相對(duì)路徑來(lái)導(dǎo)入包。

import (
  "fmt"
  "html/template"
  "net/http"
  "os"
 
  "github.com/codegangsta/cli"
  "gopkg.in/macaron.v1"
 
  "github.com/gogits/git"
  "github.com/gogits/gfm"
 
  "github.com/gogits/gogs/routers"
  "github.com/gogits/gogs/routers/repo"
  "github.com/gogits/gogs/routers/user"
)

7. 善用 gofmt

除了命名規(guī)范外,Go 還有很多格式上的規(guī)范,比如

  1. 使用 tab 進(jìn)行縮進(jìn)
  2. 一行最長(zhǎng)不要超過(guò) 80 個(gè)字符

看完上述內(nèi)容,是不是對(duì)Go語(yǔ)言中編碼規(guī)范的使用方法有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁(yè)標(biāo)題:Go語(yǔ)言中編碼規(guī)范的使用方法
文章轉(zhuǎn)載:http://muchs.cn/article14/ghgdge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、動(dòng)態(tài)網(wǎng)站、網(wǎng)站改版、網(wǎng)頁(yè)設(shè)計(jì)公司、全網(wǎng)營(yíng)銷(xiāo)推廣、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化