變數、指標地址、指標變數、取地址、取值的相互關係和特性如下:
對變數進行取地址(&)操作,可以獲得這個變數的指標變數。
指標變數的值是指標地址。
對指標變數進行取值(*)操作,可以獲得指標變數指向的原變數的值。
什麼時候使用指標和什麼時候不適用指標:
如果receiver是 map 、 func 或者 channel ,不要使用指標
如果receiver是 slice 並且該函式並不會修改此slice,不要使用指標
如果該函式會修改receiver,此時一定要用指標
如果receiver是 struct 並且包含互斥型別 sync.Mutex ,或者是類似的同步變數,receiver必須是指標,這樣可以避免物件拷貝
如果receiver是較大的 struct 或者 array ,使用指標則更加高效。多大才算大?假設struct內所有成員都要作為函式變數傳進去,如果覺得這時資料太多,就是struct太大
如果receiver是 struct , array 或者 slice ,並且其中某個element指向了某個可變數,則這個時候receiver選指標會使程式碼的意圖更加明顯
如果receiver使較小的 struct 或者 array ,並且其變數都是些不變數、常量,例如 time.Time ,value receiver更加適合,因為value receiver可以減少需要回收的垃圾量。
本作品採用《CC 協議》,轉載必須註明作者和本文連結