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

Go語(yǔ)言的方法接受者類型用值類型還是指針類型?

 更新時(shí)間:2014年10月29日 11:44:49   投稿:junjie  
這篇文章主要介紹了Go語(yǔ)言的方法接受者類型用值類型還是指針類型?本文還同時(shí)講解了關(guān)于接受者的命名方式,需要的朋友可以參考下

概述

很多人(特別是新手)在寫 Go 語(yǔ)言代碼時(shí)經(jīng)常會(huì)問(wèn)一個(gè)問(wèn)題,那就是一個(gè)方法的接受者類型到底應(yīng)該是值類型還是指針類型呢,Go 的 wiki 上對(duì)這點(diǎn)做了很好的解釋,我來(lái)翻譯一下。

何時(shí)使用值類型

1.如果接受者是一個(gè) map,func 或者 chan,使用值類型(因?yàn)樗鼈儽旧砭褪且妙愋?。
2.如果接受者是一個(gè) slice,并且方法不執(zhí)行 reslice 操作,也不重新分配內(nèi)存給 slice,使用值類型。
3.如果接受者是一個(gè)小的數(shù)組或者原生的值類型結(jié)構(gòu)體類型(比如 time.Time 類型),而且沒(méi)有可修改的字段和指針,又或者接受者是一個(gè)簡(jiǎn)單地基本類型像是 int 和 string,使用值類型就好了。

一個(gè)值類型的接受者可以減少一定數(shù)量的垃圾生成,如果一個(gè)值被傳入一個(gè)值類型接受者的方法,一個(gè)棧上的拷貝會(huì)替代在堆上分配內(nèi)存(但不是保證一定成功),所以在沒(méi)搞明白代碼想干什么之前,別因?yàn)檫@個(gè)原因而選擇值類型接受者。

何時(shí)使用指針類型

1.如果方法需要修改接受者,接受者必須是指針類型。
2.如果接受者是一個(gè)包含了 sync.Mutex 或者類似同步字段的結(jié)構(gòu)體,接受者必須是指針,這樣可以避免拷貝。
3.如果接受者是一個(gè)大的結(jié)構(gòu)體或者數(shù)組,那么指針類型接受者更有效率。(多大算大呢?假設(shè)把接受者的所有元素作為參數(shù)傳給方法,如果你覺(jué)得參數(shù)有點(diǎn)多,那么它就是大)。
4.從此方法中并發(fā)的調(diào)用函數(shù)和方法時(shí),接受者可以被修改嗎?一個(gè)值類型的接受者當(dāng)方法調(diào)用時(shí)會(huì)創(chuàng)建一份拷貝,所以外部的修改不能作用到這個(gè)接受者上。如果修改必須被原始的接受者可見(jiàn),那么接受者必須是指針類型。
5.如果接受者是一個(gè)結(jié)構(gòu)體,數(shù)組或者 slice,它們中任意一個(gè)元素是指針類型而且可能被修改,建議使用指針類型接受者,這樣會(huì)增加程序的可讀性

當(dāng)你看完這個(gè)還是有疑慮,還是不知道該使用哪種接受者,那么記住使用指針接受者。

關(guān)于接受者的命名

社區(qū)約定的接受者命名是類型的一個(gè)或兩個(gè)字母的縮寫(像 c 或者 cl 對(duì)于 Client)。不要使用泛指的名字像是 me,this 或者 self,也不要使用過(guò)度描述的名字,最后,如果你在一個(gè)地方使用了 c,那么就不要在別的地方使用 cl。

相關(guān)文章

  • 使用Go初始化Struct的方法詳解

    使用Go初始化Struct的方法詳解

    面向?qū)ο缶幊陶Z(yǔ)言最基礎(chǔ)的概念就是類(class),不過(guò)Go語(yǔ)言并沒(méi)有類的概念,所以使用Go語(yǔ)言開(kāi)發(fā)時(shí),我們一般會(huì)用struct(結(jié)構(gòu)體)來(lái)模擬面向?qū)ο笾械念?下面我們來(lái)介紹幾種創(chuàng)建struct類型變量的方法,需要的朋友可以參考下
    2024-01-01
  • Golang將Map的鍵值對(duì)調(diào)的實(shí)現(xiàn)示例

    Golang將Map的鍵值對(duì)調(diào)的實(shí)現(xiàn)示例

    本文主要介紹了Golang將Map的鍵值對(duì)調(diào)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • golang中json的omitempty使用操作

    golang中json的omitempty使用操作

    這篇文章主要介紹了golang中json的omitempty使用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go語(yǔ)言中的Slice學(xué)習(xí)總結(jié)

    Go語(yǔ)言中的Slice學(xué)習(xí)總結(jié)

    這篇文章主要介紹了Go語(yǔ)言中的Slice學(xué)習(xí)總結(jié),本文講解了Slice的定義、Slice的長(zhǎng)度和容量、Slice是引用類型、Slice引用傳遞發(fā)生“意外”等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • 使用Go語(yǔ)言封裝實(shí)現(xiàn)郵件發(fā)送功能

    使用Go語(yǔ)言封裝實(shí)現(xiàn)郵件發(fā)送功能

    在現(xiàn)代 Web 開(kāi)發(fā)中,郵件發(fā)送功能是一個(gè)常見(jiàn)的需求,本文將介紹如何在 Go 語(yǔ)言中封裝一個(gè)通用的郵件發(fā)送包,支持驗(yàn)證碼發(fā)送和通用郵件發(fā)送,需要的可以參考下
    2025-03-03
  • go編譯標(biāo)簽build?tag注釋里語(yǔ)法詳解

    go編譯標(biāo)簽build?tag注釋里語(yǔ)法詳解

    這篇文章主要為大家介紹了go編譯標(biāo)簽build?tag注釋里語(yǔ)法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Go 請(qǐng)求兔子識(shí)別接口實(shí)現(xiàn)流程示例詳解

    Go 請(qǐng)求兔子識(shí)別接口實(shí)現(xiàn)流程示例詳解

    這篇文章主要為大家介紹了Go 請(qǐng)求兔子識(shí)別接口實(shí)現(xiàn)流程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • go?test?命令示例詳解

    go?test?命令示例詳解

    go?test是Go用來(lái)執(zhí)行測(cè)試函數(shù)(test?function)、基準(zhǔn)函數(shù)(benchmark?function)和示例函數(shù)(example?function)的命令,這篇文章主要介紹了go?test?命令,需要的朋友可以參考下
    2023-11-11
  • 詳解Go語(yǔ)言中的iface和eface

    詳解Go語(yǔ)言中的iface和eface

    Go 是 Google 開(kāi)發(fā)的一種編譯型、并發(fā)型,并具有垃圾回收功能的編程語(yǔ)言,這篇文章主要介紹了Go語(yǔ)言中的iface和eface,需要的朋友可以參考下
    2023-07-07
  • golang 語(yǔ)言中錯(cuò)誤處理機(jī)制

    golang 語(yǔ)言中錯(cuò)誤處理機(jī)制

    Golang 的錯(cuò)誤處理方式可能和這些你熟悉的語(yǔ)言有所不同,今天通過(guò)本文給大家分享golang 語(yǔ)言中錯(cuò)誤處理機(jī)制,感興趣的朋友一起看看吧
    2021-08-08

最新評(píng)論