最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go中變量命名規(guī)則與實例

 更新時間:2022年01月18日 16:31:08   作者:Spongecaptain  
命名規(guī)則涉及變量、常量、全局函數(shù)、結(jié)構(gòu)、接口、方法等的命名,下面這篇文章主要給大家介紹了關于Go中變量命名的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

前言

來自 Google 的 Andrew Gerrand 曾經(jīng)關于 Go 中的參數(shù)命名規(guī)范進行了分享,slides 為 https://talks.golang.org/2014/names.slide

命名習慣很重要

  • 良好的可讀性是高質(zhì)量代碼的要求之一
  • 良好的命名習慣有助于提高代碼可讀性

良好命名喜歡的特質(zhì)

Good Name 將具有如下的特質(zhì):

  • Consistent (easy to guess),
  • Short (easy to type),
  • Accurate (easy to understand)

經(jīng)驗法則

變量申明與變量使用之間越遠,那么變量名字應當越長。

這也解釋了,為什么 for 循環(huán)次數(shù)變量使用 i 作為遍歷用的臨時變量,而不是語義上更具體的 index 作為變量名。

大小寫混用的變量名

我們不應該使用 names_with_underscores 作為變量名,而是 namesWithUnderscores 作為變量名。

另一方面,首字母縮略詞,應當是大寫,例如 ServeHTTP 以及 IDProcessor。

這被稱為 MixedCase,類似于駝峰原則命名,但是專業(yè)詞匯的首字母縮寫均應當寫成大寫形式。

變量名避免冗余

變量名不是越長越好,常變量名會模糊代碼功能。

常見的常量、類型組合可能使用非常簡短的名字:

  • 使用 i 而不是 index
  • 使用 r 而不是 reader
  • 使用 b 而不是 buffer

根據(jù)上下文,避免使用冗余的名稱:

  • 在 RuneCount 方法內(nèi)部,使用 count 而不是 reuneCount
  • 在 map 語句中,使用 ok 而不是 keyInMap:
v, ok := m[k]

常變量名也許在長函數(shù)、有很多變量的函數(shù)中有幫助,但是這通常也意味著你應該重構(gòu)代碼。

Bad codes vs good codes

// Bad
func RuneCount(buffer []byte) int {
      // runeCount -> count
    runeCount := 0
      // index -> i , buffer -> b
    for index := 0; index < len(buffer); {
        if buffer[index] < RuneSelf {
            index++
        } else {
              // size -> n
            _, size := DecodeRune(buffer[index:])
            index += size
        }
        runeCount++
    }
    return runeCount
}
// Good
func RuneCount(b []byte) int {
    count := 0
    for i := 0; i < len(b); {
        if b[i] < RuneSelf {
            i++
        } else {
            _, n := DecodeRune(b[i:])
            i += n
        }
        count++
    }
    return count
}

函數(shù)參數(shù)的命名

函數(shù)參數(shù)與變量名一樣,都起到了文檔的作用。

1.當函數(shù)參數(shù)的類型具有描述性時,那么函數(shù)參數(shù)名就可以簡短一些:

func AfterFunc(d Duration, f func()) *Timer
func Escape(w io.Writer, s []byte)

2.當函數(shù)參數(shù)的類型語義不清,那么參數(shù)名應當更具體詳細一些:

func Unix(sec, nsec int64) Time
???????func HasPrefix(s, prefix []byte) bool

返回值的命名

導出函數(shù)(exported function)返回值應當僅僅出于編寫文檔目的進行命名。

下面是返回值命名的好例子:

// Good
func Copy(dst Writer, src Reader) (written int64, err error)
// Good
func ScanBytes(data []byte, atEOF bool) (advance int, token []byte, err error)

方法 Receiver 的命名

Go 中結(jié)構(gòu)體可以擁有方法,在為結(jié)構(gòu)體聲明方法時,結(jié)構(gòu)體被稱為 receiver。

按照慣例,方法接收者的命名通常為 1 個字符或者 2 個字符,因為結(jié)構(gòu)體的每一個方法都將使用同一個 receiver 名稱。

// Good
func (b *Buffer) Read(p []byte) (n int, err error)
// Good
func (sh serverHandler) ServeHTTP(rw ResponseWriter, req *Request)
// Good
func (r Rectangle) Size() Point

Receiver 的名稱一定要確保一致性,如果結(jié)構(gòu)體的 method1 使用 r 作為 receiver 名稱,那么 method2 就不應當使用 rdr 作為名稱。

導出 package 級別變量命名

package 級別的變量已經(jīng)被 package name 限定了,因此需要注意導出變量、常量、函數(shù)、類型名的冗余問題。

例如:

  • 我們使用 bytes.Buffer 而不是 bytes.ByteBuffer
  • 我們使用 strings.Reader 而不是 strings.StringReader

導出變量名不要與 package 之間存在冗余。

接口類型

只有一個方法的接口,接口名通常簡單在方法后面加上 er 來進行命令,例如:

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

有時候,上述策略會導致接口名語法不正確,但是我們?nèi)匀豢梢赃x擇這么做,例如:

type Execer interface {
    Exec(query string, args []Value) (Result, error)
}

也有時候,我們會修改接口名,使得其符合英語語法:

type ByteReader interface {
    ReadByte() (c byte, err error)
}

當一個接口包含多個方法時,應當選擇一個準確描述其用途的名稱,例如 net.Conn,http.ResponseWriter,io.ReadWriter。

error 命名

錯誤類型與錯誤變量應當有不同的命名格式:

// 錯誤類型 Error types
type ExitError struct {
    ...
}
// 錯誤變量 Error values
var ErrFormat = errors.New("image: unknown format")

Packages 名

選擇對導出的名稱具有意義的包名稱。

避免使用 util、common 等包名。

結(jié)論

使用短變量名

變量取名考慮上下文,避免冗余,例如函數(shù)內(nèi)的局部變量考慮函數(shù)名,包導出變量考慮包名

總結(jié)

到此這篇關于Go中變量命名的文章就介紹到這了,更多相關Go變量命名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • golang os.Eixt使用示例

    golang os.Eixt使用示例

    在Go語言中,os.Exit函數(shù)用于立即終止程序并返回一個指定的退出狀態(tài)碼,本文就來介紹一下golang os.Eixt使用,具有一定的參考價值,感興趣的可以了解一下
    2024-10-10
  • Golang解析yaml文件的方法小結(jié)

    Golang解析yaml文件的方法小結(jié)

    Go 語言沒有內(nèi)置解析 yaml 文件的功能,實現(xiàn) yaml 的解析可以使用第三方庫,下面我們就來看看如何使用opkg.in/yaml.v2 和 gopkg.in/yaml.v3實現(xiàn)解析yaml吧
    2024-11-11
  • golang多維度排序及題解最長連續(xù)序列

    golang多維度排序及題解最長連續(xù)序列

    這篇文章主要為大家介紹了golang多維度排序及題解最長連續(xù)序列示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • golang字符串本質(zhì)與原理詳解

    golang字符串本質(zhì)與原理詳解

    這篇文章主要介紹了golang字符串本質(zhì)與原理詳解,golang中的字符串指的是所有8比特位字節(jié)字符串的集合,通常是UTF-8編碼的文本,更多相關內(nèi)容需要的小伙伴可以參考一下
    2022-06-06
  • Go模塊布局管理文檔翻譯理解

    Go模塊布局管理文檔翻譯理解

    這篇文章主要為大家介紹了Go模塊布局管理文檔翻譯理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Go語言fsnotify接口實現(xiàn)監(jiān)測文件修改

    Go語言fsnotify接口實現(xiàn)監(jiān)測文件修改

    這篇文章主要為大家介紹了Go語言fsnotify接口實現(xiàn)監(jiān)測文件修改的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Go語言中?Print?Printf和Println?的區(qū)別解析

    Go語言中?Print?Printf和Println?的區(qū)別解析

    這篇文章主要介紹了Go語言中?Print?Printf和Println?的區(qū)別,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • 詳解如何使用Bazel構(gòu)建Golang程序

    詳解如何使用Bazel構(gòu)建Golang程序

    這篇文章主要為大家介紹了如何使用Bazel構(gòu)建Golang程序?qū)嵗斀猓行枰呐笥芽梢越梃b參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • go等待一組協(xié)程結(jié)束的操作方式

    go等待一組協(xié)程結(jié)束的操作方式

    這篇文章主要介紹了go等待一組協(xié)程結(jié)束的操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Golang優(yōu)雅關閉channel的方法示例

    Golang優(yōu)雅關閉channel的方法示例

    Goroutine和channel是Go在“并發(fā)”方面兩個核心feature,下面這篇文章主要給大家介紹了關于Golang如何優(yōu)雅關閉channel的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考解決,下面來一起看看吧。
    2017-11-11

最新評論

浦县| 余干县| 温州市| 宁都县| 襄垣县| 武城县| 灵石县| 泰来县| 光泽县| 宁陕县| 寿光市| 襄樊市| 洛南县| 旬邑县| 巴林右旗| 衡南县| 新津县| 府谷县| 大田县| 宣城市| 简阳市| 湖南省| 黄平县| 陆河县| 会宁县| 凤翔县| 新竹市| 仁寿县| 铁力市| 永德县| 普兰县| 彰化县| 邓州市| 石渠县| 当涂县| 沧州市| 海口市| 崇州市| 永春县| 桓仁| 彭水|