首页  >  文章  >  后端开发  >  如何在具有共享字段的不同 Go 结构中高效实现保存方法?

如何在具有共享字段的不同 Go 结构中高效实现保存方法?

Barbara Streisand
Barbara Streisand原创
2024-11-20 12:56:38593浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn