首頁 > 後端開發 > Golang > 主體

如何為共用欄位的 Go 結構體實作通用的 Save() 方法?

Susan Sarandon
發布: 2024-11-24 07:03:11
原創
322 人瀏覽過

How to Implement a Common `Save()` Method for Go Structs Sharing a Field?

如何在Go 中實現具有共享字段的結構體的通用方法

當使用共享公共字段的結構體時,它可能會需要添加一種可以應用於所有這些的方法。本問題在 Beego/ORM 的背景下探討了這個場景,其中兩個結構體 ModelA 和 ModelB 需要 Save() 方法。

建議的解決方案

  • 介面定義:定義一個名為Savable的接口,它宣告了Save()方法。為 ModelA 和 ModelB 實作此接口,以允許它們利用 Save() 功能。

<br>type Savable 介面{<pre class="brush:php;toolbar:false">Save()
登入後複製

}

func (a ModelA) Save() {

// Implementation for ModelA
登入後複製
func (a ModelA) Save() {

}
// Implementation for ModelB
登入後複製

func (b ModelB) Save() {

    }
嵌入:

建立一個名為ModelC 的基本結構包含共用Guid 字段。將此結構嵌入到 ModelA 和 ModelB 中。在 ModelC 中定義 Save() 方法,使其可供 ModelA 和 ModelB 使用。

Guid string `orm:"pk"`
登入後複製
<p>type ModelC struct {</p><p></p>}<pre class="brush:php;toolbar:false">// Implementation for ModelC
登入後複製

func (c ModelC) Save() 錯誤{

func (c ModelC) Save() 錯誤{

ModelC
FiledA string
登入後複製

}

型ModelA 結構體{
ModelC
FiledB string
登入後複製


}

類型ModelB 結構體{

}

嵌入的注意事項

應該注意的是,嵌入有一定的限制。雖然嵌入式 Save() 方法可供 ModelA 和 ModelB 使用,但特定於這些結構的任何其他欄位都不會自動包含在 Save() 作業中。

結論 最適合的解決方案取決於系統的特定要求。如果 ModelA 和 ModelB 之間的 Save() 實作差異很大,則介面方法可提供更大的靈活性。然而,如果它們共享一個共同的實現,嵌入可能會更有效,因為它消除了對冗餘程式碼的需求。

以上是如何為共用欄位的 Go 結構體實作通用的 Save() 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板