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

如何在 Go 中重寫嵌入的結構體方法?

Barbara Streisand
發布: 2024-10-28 16:10:02
原創
800 人瀏覽過

How to Override Embedded Struct Methods in Go?

在Go 中重寫嵌入式結構體的方法

在Go 中,當一個結構體繼承另一個結構體(稱為嵌入)時,它會繼承該嵌入結構體的所有欄位和方法結構。但是,如果繼承結構定義了自己的方法,其名稱與嵌入結構中的方法同名,則嵌入方法將被隱藏,或者更確切地說,被隱藏。

重寫嵌入方法

重寫嵌入結構中的方法涉及使用以下語法明確存取嵌入結構的方法:

<code class="go">yourStruct.EmbeddedStruct.method()</code>
登入後複製

例如:

<code class="go">type Base struct {
    val int
}
func (b *Base)Set(i int) {
    b.val = i
}

type Sub struct {
    Base
    changed bool
}</code>
登入後複製

這裡,Sub 嵌入了Base。但是,Sub 的 Set 方法會覆寫 Base 的 Set 方法。要從 Sub 中呼叫 Base 的原始 Set 方法,需要明確呼叫 b.Base.Set(i)。

範例:重寫和呼叫嵌入方法

考慮以下程式碼:

<code class="go">func t16() {
    s := &Sub{}
    s.Set(1)
    var b *Base = &s.Base
    fmt.Printf("%+v\n", b)
    fmt.Printf("%+v\n", s)
}</code>
登入後複製

最初,呼叫 Sub 的 Set 方法,該方法覆寫 Base 的 Set 方法。為了示範Base 的Set 方法的原始行為,可以呼叫s.Base.Set(10):

<code class="go">func t16() {
    s := &Sub{}
    s.Base.Set(10)
    var b *Base = &s.Base
    fmt.Printf("%+v\n", b)
    fmt.Printf("%+v\n", s)
}</code>
登入後複製

這確保呼叫Base 的原始Set 方法,繞過Sub 的自訂Set 方法及其後續修改改變了。

以上是如何在 Go 中重寫嵌入的結構體方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!