Go 接收器方法調用語法中的混亂
Effective Go 中的文件聲稱指針方法只能在指針上調用,而不能在指針上調用在值上調用。然而,最近的一項實驗挑戰了這個概念。
在值類型上呼叫 vAge.Set(10) 時,程式碼編譯成功。這似乎與文檔相矛盾。它提出了一個問題:程式碼是否不正確,或者文件中是否有誤解?
答案在於可尋址性。 Go 語言規範闡明,如果方法是在值的類型中定義的,並且參數可以指派給方法的參數,則對值的方法呼叫是有效的。
如果值是可尋址的,則可以取消引用以獲得指向基礎類型的指標。在這種情況下,vAge 是可尋址的,因為它是支援指標運算子 (&) 的類型 (age) 的值。
因此,vAge.Set(10) 相當於 (&vAge).Set( 10),這是有效的,因為 (&vAge) 是指向 Age 類型的指標。可以在此指標上呼叫指標方法 Set,從而允許修改接收者。
語言中的這種微妙之處允許 Go 中的值類型以從文件中可能無法立即看出的方式運行。它強調了理解語言規範以避免潛在誤解的重要性。
以上是**Go 值類型可以呼叫指標方法嗎?看看可尋址性和方法呼叫**的詳細內容。更多資訊請關注PHP中文網其他相關文章!