首頁 > 後端開發 > Golang > 當接收者類型和值類型不符時,Go 如何處理方法和指標?

當接收者類型和值類型不符時,Go 如何處理方法和指標?

Barbara Streisand
發布: 2024-11-09 04:08:01
原創
554 人瀏覽過

How does Go handle methods and pointers when the receiver type and the value type don't match?

Golang 中的指標:全面講解

Go 教學中提到指標用來實作值上的方法。但是,如果我們聲明一個帶有非指標接收器的方法,但嘗試在指標值上使用它,或者反之亦然,會發生什麼?

答案在於 Go 語言的兩個基本規則:

方法派生:
Go 允許從現有方法派生方法。在您的範例中,方法 func (v Vertex) Abs() float64 衍生自方法 func (v *Vertex) Abs() float64。這意味著當你聲明前一個方法時,會自動產生一個新的實現,它本質上是用指向接收者的指標來呼叫原始方法:

因此,無論你是否聲明func (v * Vertex) Abs() 或func (v Vertex) Abs(),這兩種情況都會呼叫產生的方法。

自動取位址:
Go 可以自動產生指標到一個變數。在下列情況下,表達式v.Abs() 解析為程式碼:

這表示當您將值傳遞給需要指標的方法時,Go 無法自動從指標衍生出該方法現有的,編譯器會產生一個指向該值的指針,然後呼叫該指針上的方法。

總而言之,Go 遵循以下規則來處理指標和方法:

  • 方法具有非指標接收器的方法可以從具有指標接收器的方法派生,並且派生方法將使用指向接收器的指標呼叫原始方法。
  • 如果 Go 無法自動從現有方法派生方法,它將產生指向該值的指標並呼叫該指標上的方法。

以上是當接收者類型和值類型不符時,Go 如何處理方法和指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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