濮阳杆衣贸易有限公司

主頁 > 知識庫 > Go語言的方法接受者類型用值類型還是指針類型?

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

熱門標簽:經(jīng)常接到推銷電話機器人的電話 外呼系統(tǒng)多少錢一年 外呼系統(tǒng)如何接收服務密碼 海外照相館地圖標注入駐 客服級電銷機器人 旅游廁所如何電子地圖標注 工商信用卡外呼系統(tǒng)教程 滁州自建外呼系統(tǒng) 智能營銷軟件

概述

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

何時使用值類型

1.如果接受者是一個 map,func 或者 chan,使用值類型(因為它們本身就是引用類型)。
2.如果接受者是一個 slice,并且方法不執(zhí)行 reslice 操作,也不重新分配內存給 slice,使用值類型。
3.如果接受者是一個小的數(shù)組或者原生的值類型結構體類型(比如 time.Time 類型),而且沒有可修改的字段和指針,又或者接受者是一個簡單地基本類型像是 int 和 string,使用值類型就好了。

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

何時使用指針類型

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

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

關于接受者的命名

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

您可能感興趣的文章:
  • GO語言基本類型分析
  • GO語言類型轉換和類型斷言實例分析
  • Go語言基礎知識總結(語法、變量、數(shù)值類型、表達式、控制結構等)
  • GO語言基本數(shù)據(jù)類型總結
  • Go語言中的復合類型詳細介紹
  • 為什么Go語言把類型聲明放在后面?
  • Go語言基本的語法和內置數(shù)據(jù)類型初探
  • Go語言中如何通過方法為類型添加行為

標簽:晉城 運城 喀什 九江 楚雄 深圳 本溪 湘潭

巨人網(wǎng)絡通訊聲明:本文標題《Go語言的方法接受者類型用值類型還是指針類型?》,本文關鍵詞  語言,的,方法,接受者,類型,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go語言的方法接受者類型用值類型還是指針類型?》相關的同類信息!
  • 本頁收集關于Go語言的方法接受者類型用值類型還是指針類型?的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    吴川市| 右玉县| 普安县| 武清区| 承德市| 商城县| 石门县| 大冶市| 星座| 赤水市| 本溪市| 三穗县| 乐亭县| 临邑县| 张家川| 遵化市| 启东市| 鄄城县| 绥棱县| 长海县| 广水市| 东乡| 新巴尔虎左旗| 城市| 高尔夫| 长宁区| 上饶市| 靖西县| 宣城市| 高邮市| 海城市| 原阳县| 高阳县| 太白县| 新泰市| 郧西县| 铜山县| 娄底市| 共和县| 屏南县| 华容县|