go 的變數使用

程式設計師的貓發表於2020-07-06

變數、指標地址、指標變數、取地址、取值的相互關係和特性如下:

對變數進行取地址(&)操作,可以獲得這個變數的指標變數。
指標變數的值是指標地址。
對指標變數進行取值(*)操作,可以獲得指標變數指向的原變數的值。

什麼時候使用指標和什麼時候不適用指標:

如果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 協議》,轉載必須註明作者和本文連結

你還差得遠吶!

相關文章