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

如何重寫 Golang 中的嵌入式結構體方法?

Patricia Arquette
Patricia Arquette原創
2024-10-27 08:55:30798瀏覽

How Can You Override Embedded Struct Methods in Golang?

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

在Golang 中,當一個結構體嵌入另一個結構體(稱為嵌入)時,嵌入結構體的字段嵌入結構可以直接存取方法。但是,如果嵌入結構體從嵌入結構體中重新定義了方法,則它可以覆寫原始方法。

考慮以下程式碼:

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

我們已將 Base 嵌入到 Sub 中。現在,如果我們嘗試從Sub 存取Base 的Set 方法,它將被Sub 自己的Set 方法隱藏:

<code class="go">func t16() {
    s := &Sub{}
    // This calls Base's Set method
    s.Base.Set(1) 
    // This causes an error, as s.Set hides Base's Set
    s.Set(10) 
}</code>

要覆寫此行為,我們可以重新定義Sub 的Set 方法以明確呼叫Base的Set 方法:

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

現在,當我們呼叫s.Set() 時,它將呼叫Base 的Set 方法,同時仍允許我們追蹤Sub 中的變更。

<code class="go">func t16() {
    s := &Sub{}
    // Calls Sub's overridden Set method
    s.Set(10) 
    fmt.Printf("%+v\n", s) // Output: {Base:{val:10} changed:true}
}</code>

此方法可讓您覆寫嵌入結構的方法,同時透過嵌入結構欄位保持對原始方法的存取。

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

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