為什麼Go 會區分T 和*T 上的方法集
在Go 中,在類型T 上定義的方法可以被T和*T 使用T,而T 上的方法不能被T 使用。這就提出了為什麼會有這種不對稱性的問題。
T 缺乏靜態記憶體位址
在 Go 中並不總是可以使用「&」運算子來取得 T 值的位址。這是由於優化可以動態重新定位值的記憶體位址。例如,儲存在映射中或從函數傳回的值可能沒有固定位址。
保證 *T 的存取
相反,取消引用指向 T 的指標value (T) 總是傳回具有已知記憶體位址的 T 值。這允許在 T 上定義的方法存取和修改與 T 值關聯的實際資料。
指標轉換中的不對稱性
雖然可以將透過解引用將T 轉換為T,透過取得位址將T 轉換為 T 並不總是可行的。這種不對稱性是由於需要保證 *T 上的方法呼叫始終具有有效的記憶體位址來存取資料。
後果
這種設計既有優點也有優點缺點:
優點:
缺點:
以上是為什麼 Go 中的「*T」不能使用「T」上的方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!