首頁 > 後端開發 > Golang > 主體

為什麼 T 不能使用 *T 上定義的 Go 方法?

Patricia Arquette
發布: 2024-10-31 06:02:02
原創
836 人瀏覽過

Why Can't Go Methods Defined on *T Be Used by T?

為什麼Go 不允許T 使用*T 上的方法集

在Go 中,可以使用在值類型T 上定義的方法T 和*T 都可以使用,而T 不能使用指標型別*T 上定義的方法。這種看似隨意的差異源自於電腦系統中記憶體的複雜性。

無法取得指標需求

考慮使用 T 變數呼叫 *T 上的方法的情況。為此,必須獲得指向 T 變數的指標。然而,並非總是保證能夠獲得指針。

Go 的規範明確規定了可以執行取址操作 (&) 的條件。其中包括存取變數、指標間接和陣列索引操作。但是,它排除了存取儲存在映射中的變量,如下例所示:

<code class="go">res := TMap["key"].pointerMethod()</code>
登入後複製

在這種情況下,取得指向變數的指標是不切實際的,因為這會對執行時間的實現施加限制

設計的後果

這個設計決策既有優點也有缺點:

  • 優點:

    • 允許T型別的值語義,確保方法呼叫不會修改原始值。
    • 防止透過指標引用意外修改值。
  • 缺點:

    • 在某些情況下,取得指向T 變數的指標來呼叫指標可能會很不方便方法。
    • 在設計希望值和指標接收器都避免歧義的 API 時需要仔細考慮。

以上是為什麼 T 不能使用 *T 上定義的 Go 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板