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