国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

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

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

概述

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

何時使用值類型

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

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

何時使用指針類型

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

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

關于接受者的命名

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 时尚| 永昌县| 泸水县| 邓州市| 江华| 石阡县| 固始县| 桦甸市| 鄂温| 梁平县| 仲巴县| 台南市| 玉林市| 玛多县| 安吉县| 平南县| 繁昌县| 贡山| 思南县| 乳山市| 漳浦县| 于田县| 寻乌县| 平顺县| 永新县| 通山县| 房产| 福州市| 叶城县| 木里| 井陉县| 繁昌县| 奈曼旗| 邹城市| 韩城市| 库尔勒市| 蒲江县| 中超| 浦江县| 呼玛县| 金川县|