重寫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中文網其他相關文章!