為什麼Go 不允許T 使用*T 上的方法集
在Go 中,可以使用在值類型T 上定義的方法T 和*T 都可以使用,而T 不能使用指標型別*T 上定義的方法。這種看似隨意的差異源自於電腦系統中記憶體的複雜性。
無法取得指標需求
考慮使用 T 變數呼叫 *T 上的方法的情況。為此,必須獲得指向 T 變數的指標。然而,並非總是保證能夠獲得指針。
Go 的規範明確規定了可以執行取址操作 (&) 的條件。其中包括存取變數、指標間接和陣列索引操作。但是,它排除了存取儲存在映射中的變量,如下例所示:
<code class="go">res := TMap["key"].pointerMethod()</code>
在這種情況下,取得指向變數的指標是不切實際的,因為這會對執行時間的實現施加限制
設計的後果
這個設計決策既有優點也有缺點:
優點:
缺點:
以上是為什麼 T 不能使用 *T 上定義的 Go 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!