首頁 > 後端開發 > Golang > 如何有效率地將通用方法新增至共用欄位的不同 Go 結構體?

如何有效率地將通用方法新增至共用欄位的不同 Go 結構體?

Barbara Streisand
發布: 2024-12-01 12:39:11
原創
201 人瀏覽過

How Can I Efficiently Add a Common Method to Different Go Structs Sharing a Field?

在Go 中為具有公共欄位的不同結構添加方法

在您的應用程式中,您遇到需要為兩個模型(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中文網其他相關文章!

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