這篇文章主要講解了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)一使用 駝峰命名法
這里列舉了一些常見(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ù)命名
另外,函數(shù)內(nèi)部的參數(shù)的排列順序也有幾點(diǎn)原則
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 特別注釋
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ī)范,比如
看完上述內(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)