a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Golang > 正文

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

2020-04-01 19:24:18
字體:
供稿:網(wǎng)友
這篇文章主要介紹了Go語言的方法接受者類型用值類型還是指針類型?本文還同時(shí)講解了關(guān)于接受者的命名方式,需要的朋友可以參考下
 

概述

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

何時(shí)使用值類型

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

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

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

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

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

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

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 99re热精品视频 | 日韩欧美国产成人一区二区 | 精品一区二区久久久久久久网站 | 老司机在线精品视频 | 四虎新网址 | 美女视频黄又黄又免费 | 欧美一区二区三区在线观看 | 在线播放亚洲 | 亚洲视频欧美视频 | 九九九久久久 | 日韩三级电影网 | av免费网站| 三级亚洲| www.xxx免费| 国产精品视频综合 | 亚洲九九| 久久成人国产精品 | 妞干网国产 | 国产精品一区二区久久久久 | 中文字幕 国产精品 | 热久久这里只有精品 | 欧美成人免费一级人片100 | 国产一级免费在线 | 亚洲va一区二区 | 久久久综合色 | 欧美性猛交久久久乱大交小说 | 性色av一区二区三区 | 在线播放黄色片网站 | 成人午夜视频在线观看 | 国产欧美在线视频 | 国产日韩91 | 日韩在线视频观看 | 国产视频福利在线 | 久久精品在线 | 欧美日韩电影一区二区三区 | 日本免费不卡 | 免费黄色在线 | 99国产视频 | av天空| 亚洲福利免费 | 在线日本视频 |