在您的應用程式中,您遇到需要為兩個模型(ModelA)實作Save () 方法和模型B。儘管存在差異,但它們有一個共同的領域:Guid。通常,建立一個基本結構來保存公共欄位並嵌入到各個模型中。然而,這種方法為 beego/orm 這樣的 ORM 帶來了障礙。
使用介面實現 Save() 方法
一個有效的解決方案是定義一個接口,可保存,並在 ModelA 和 ModelB 中實現它。這使您能夠使用介面類型來呼叫 Save() 方法,而不管所使用的特定模型如何。以下是範例:
type Savable interface { Save() } func (a ModelA) Save() { // Save implementation for ModelA } func (b ModelB) Save() { // Save implementation for ModelB } // Example usage var i Savable i = SomeMethodThatRetunsMyModel() i.Save()
嵌入通用結構
如果首選嵌入類型,則可以採取替代方法。建立一個公共結構 ModelC 來保存 Guid 欄位。然後,將ModelC嵌入ModelA和ModelB中。在 ModelC 中定義 Save() 方法,從而提供跨兩個模型的共享功能。
type ModelC struct { Guid string `orm:"pk"` } func (c ModelC) Save() error { // Common Save implementation return nil } type ModelA struct { ModelC FiledA string } type ModelB struct { ModelC FiledB string }
需要注意的是,這種嵌入方法不會包含ORM 的插入語句中未定義的任何字段模型C.因此,如果需要明確操作非公共字段,則可能需要直接引用ModelC 方法。
以上是如何有效率地將通用方法新增至共用欄位的不同 Go 結構體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!