理解 T(值接收器)和 T(指標接收器)上方法的差異在 Go 中至關重要。 T 上的方法會影響變數的副本,而 T 上的方法會操縱實際資料。
歧視的原因
這種不對稱性背後的原因源於事實上,取得任意變數的位址並不總是可行的。雖然變數通常駐留在記憶體中,但最佳化可以使其位址動態化。
考慮儲存在映射中的變數:
<code class="go">res := TMap["key"].pointerMethod()</code>
在此範例中,取得指向映射內變數的指標需要執行時間確保記憶體位址保持靜態。這會對地圖的內部實作施加限制,降低其效率。
設計的優點和缺點
優點:
缺點:
結論
Go 對 T 和 *T 方法的區分是基於與獲取所有變數的靜態位址相關的挑戰。這種設計保留了值的不變性,並避免了對資料的意外修改,但代價是潛在的效能開銷和增加的複雜性。
以上是為什麼 Go 會區別對待 T 和 *T 上的方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!