如何將保存方法附加到具有共享欄位的不同結構
考慮以下上下文:
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中文網其他相關文章!