非指標型別上的指標方法:解開混亂
儘管存在指標方法只能在指標上呼叫的概念,但它上呼叫的概念,但它是可以對非指標值執行它們。這種明顯的差異需要澄清。
接收者規則
該原則指出值方法可以在值和指針上調用,而指針方法僅限於指針僅。
案例Point
在給定的範例中, car.fourWheels() 方法有一個指標接收器。但是,我們可以使用表達式 c.fourWheels() 在 car 值上呼叫它。
真相揭曉
這是可能的,因為 Go 的規範允許呼叫指標方法處理非指標值(如果後者是可尋址的)。在範例中,car 變數是可尋址的,因此可以使用 & 運算子將其轉換為指標。因此,表達式 c.fourWheels() 等價於簡寫:
(&c).fourWheels()
澄清規則
「接收者規則」應解釋如下:
不可尋址表達式
但是,需要注意的是,並非所有表達式都會產生可尋址值。例如,函數傳回值和映射索引表達式通常會產生不可定址的值。在這種情況下,不能直接對這些表達式的結果呼叫指標方法。
結論
由於 Go 的可尋址性規則,可以對非指標值呼叫指標方法。這使我們能夠以更靈活的方式利用指標方法,但必須意識到不可尋址表達式所施加的限制。
以上是Go 中的非指標型別可以呼叫指標方法嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!