首頁  >  文章  >  後端開發  >  如何在 Go 中重寫嵌入結構的方法?

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

Patricia Arquette
Patricia Arquette原創
2024-10-26 14:08:31295瀏覽

How do I override an embedded struct's method in Go?

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

在Go 中嵌入結構體時,嵌入結構體的方法將作為結構體的頂級成員使用嵌入結構。這允許輕鬆存取嵌入結構的功能。但是,如果嵌入結構體實作了自己的同名方法,則嵌入結構體的方法將被隱藏。

考慮以下範例:

<code class="go">package main

import "fmt"

type Base struct {
    val int
}
func (b *Base)Set(i int) {
    b.val = i
}
type Sub struct {
    Base
    changed bool
}

func (b *Sub)Set(i int) {
    b.val = i
    b.changed = true
}
func main() {
    s := &Sub{}
    s.Base.Set(1)
    var b *Base = &s.Base
    fmt.Printf("%+v\n", b)
    fmt.Printf("%+v\n", s)
}</code>

在此範例中,Sub 結構體嵌入 Base 結構。 Base 結構體有一個 Set 方法,該方法被 Sub 結構體自己的 Set 方法隱藏。當呼叫 s.Base.Set(1) 時,呼叫的是 Base 結構體的 Set 方法,而不是 Sub 結構體的 Set 方法。

要覆寫嵌入結構體中嵌入結構體的方法,只需呼叫嵌入結構體即可嵌入結構體方法中的結構體方法。例如,以下程式碼將覆寫Sub 結構中Base 結構的Set 方法:

<code class="go">func (b *Sub)Set(i int) {
    b.Base.Set(i)
    b.changed = true
}</code>

透過此更改,當呼叫s.Set(1) 時,將呼叫Sub 結構的Set 方法,它將呼叫Base結構體的Set 方法,並將變更的欄位設為true。這允許您覆蓋嵌入結構的方法的行為,同時仍然可以存取嵌入結構的功能。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn