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