go 变量大写_28. 一文了解Go语言中编码规范
大家好,我是明哥。
由于某些不可抗力,之前該專欄的所有內容都被刪除了。因此之后的一段時間內,我會重新發布這些文章,先給已經看過的關注者提個醒。
本文原文:http://golang.iswbm.com
Github:http://github.com/iswbm/GolangCodingTime
每個語言都有自己特色的編碼規范,學習該語言的命名規范,能讓你寫出來的代碼更加易讀,更加不容易出現一些低級錯誤。
本文根據個人編碼習慣以及網絡上的一些文章,整理了一些大家能用上的編碼規范,可能是一些主流方案,但不代表官方,這一點先聲明一下。
1. 文件命名
2. 常量命名
目前在網絡上可以看到主要有兩種風格的寫法
這兩種風格,沒有孰好孰弱,可自由選取,我個人更傾向于使用第二種,主要是能一眼與變量區分開來。
如果要定義多個變量,請使用 括號 來組織。
const (APP_VERSION = "0.1.0"CONF_PATH = "/etc/xx.conf" )3. 變量命名
和常量不同,變量的命名,開發者們的喜好就比較一致了,統一使用 駝峰命名法
這里列舉了一些常見的特有名詞:
// 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. 函數命名
另外,函數內部的參數的排列順序也有幾點原則
5. 接口命名
使用駝峰命名法,可以用 type alias 來定義大寫開頭的 type 給包外訪問。
type helloWorld interface {func Hello(); }type SayHello helloWorld當你的接口只有一個函數時,接口名通常會以 er 為后綴
type Reader interface {Read(p []byte) (n int, err error) }6. 注釋規范
注釋分為
6.1 包注釋
6.2 代碼注釋
用于解釋代碼邏輯,可以有兩種寫法
單行注釋使用 // ,多行注釋使用 /* comment */
// 單行注釋/* 多 行 注 釋 */另外,對于代碼注釋還有一些更加苛刻的要求,這個看個人了,摘自網絡:
- 所有導出對象都需要注釋說明其用途;非導出對象根據情況進行注釋。
- 如果對象可數且無明確指定數量的情況下,一律使用單數形式和一般進行時描述;否則使用復數形式。
- 包、函數、方法和類型的注釋說明都是一個完整的句子。
- 句子類型的注釋首字母均需大寫;短語類型的注釋首字母需小寫。
- 注釋的單行長度不能超過 80 個字符。
- 類型的定義一般都以單數形式描述:
// 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 { ...
- 函數與方法的注釋需以函數或方法的名稱作為開頭:
// Post returns *BeegoHttpRequest with POST method.
- 如果一句話不足以說明全部問題,則可換行繼續進行更加細致的描述:
// Copy copies file from source to target path.
// It returns false and error when error occurs in underlying function calls.
- 若函數或方法為判斷類型(返回值主要為 bool 類型),則以 <name> returns true if 開頭:
// HasPrefix returns true if name has any string in given slice as prefix.
func HasPrefix(name string, prefixes []string) bool { ...
6.3 特別注釋
- TODO:提醒維護人員此部分代碼待完成
- FIXME:提醒維護人員此處有BUG待修復
- NOTE:維護人員要關注的一些問題說明
7. 包的導入
單行的包導入
import "fmt"多個包導入,請使用 {} 來組織
import {"fmt""os" }另外根據包的來源,對排版還有一定的要求
8. 善用 gofmt
除了命名規范外,Go 還有很多格式上的規范,比如
因此在格式上的問題,你大部分都可以放心交由 gofmt 幫你調整。關于 gofmt 的文章還在寫,應該這兩天就會更新。你可以過兩天再來看看。
參考文章:
- Go語言(Golang)編碼規范
好了,今天的文章就到這里了。
若今天的分享對你有幫助,不如點個贊,支持一下?
總結
以上是生活随笔為你收集整理的go 变量大写_28. 一文了解Go语言中编码规范的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell中的各种括号的使用方法
- 下一篇: AR/QCA SPI 启动原理和 ART