首頁 > 後端開發 > Golang > 如何在具有共用欄位的不同 Go 結構中高效實現保存方法?

如何在具有共用欄位的不同 Go 結構中高效實現保存方法?

Barbara Streisand
發布: 2024-11-20 12:56:38
原創
651 人瀏覽過

How to Efficiently Implement a Save Method Across Dissimilar Go Structs with Shared Fields?

如何將保存方法附加到具有共享欄位的不同結構

考慮以下上下文:

type ModelA struct {
    Guid string `orm:"pk"`
    FiledA string
}

type ModelB struct {
    Guid string `orm:"pk"`
    FiledB string
}
登入後複製

需要需要需要為兩個結構(ModelA 和模型B)。雖然可以建立一個通用的基礎結構並將其嵌入到 ModelA 和 ModelB 中,但由於 ORM 限制,這種方法不可行。

替代方法:實作介面

指定一個通用的介面用於保存數據,例如Savable,如圖所示:

type Savable interface {
   Save()
}
登入後複製

為每個結構實作Save() 方法,確保它們滿足Savable 介面:

func (a ModelA) Save() {
   // Save logic for ModelA
}

func (b ModelB) Save() {
   // Save logic for ModelB
}
登入後複製

使用此結構,您可以對以下物件的實例進行操作透過Savable 介面的任一結構:

var i Savable
i = SomeMethodThatRetunsMyModel()
i.Save()
SomeOthermMethodThatAcceptsASavableAndCallesSave(i)
登入後複製

實作使用嵌入

或者,您也可以透過使用公共欄位(Guid)定義基本ModelC 來選擇嵌入方法:

type ModelA struct {
   ModelC
   FiledA string
}

type ModelB struct {
   ModelC
   FiledB string
}

type ModelC struct {
   Guid string `orm:"pk"`
}

func (c ModelC) Save() error {
   // Save logic for ModelC
   return nil
}
登入後複製

但是,請注意,此方法只會保存定義在中的欄位ModelC.

注意事項

請務必注意這兩種方法的限制:

  • 如果您需要,嵌入方法可能不適合靜態引用嵌入類型。
  • 介面方法提供了更大的靈活性,但可能會導致程式碼

最終,最佳解決方案取決於您應用程式的特定要求。

以上是如何在具有共用欄位的不同 Go 結構中高效實現保存方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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