首页 > 后端开发 > Golang > 正文

如何高效地为不同字段的 Go 结构体添加共享功能?

Susan Sarandon
发布: 2024-11-19 08:49:02
原创
805 人浏览过

How to Efficiently Add Shared Functionality to Go Structs with Different Fields?

如何向差异化的 Go 结构添加共享功能

在 Go 中,您可能会遇到需要向共享结构添加通用方法的情况特定字段,例如以下示例中的 Guid 字段:

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

type ModelB struct {
    Guid string `orm:"pk"`
    FiledB string
}
登录后复制

传统上,人们可能会考虑使用基本结构并将其嵌入到 ModelA 和 ModelB 中。然而,这种方法可能无法与 orm 库无缝配合。

一个可行的解决方案涉及使用接口。通过定义接口,您可以声明 ModelA 和 ModelB 都必须实现的通用契约:

type Savable interface {
    Save()
}
登录后复制

接下来,为两个结构实现 Save() 方法:

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

func (b ModelB) Save() {
    // Implementation for ModelB
}
登录后复制

现在,您可以创建一个 Savable 类型的变量并将其分配给 ModelA 或 ModelB:

var i Savable
i = ModelA{}
i.Save()
登录后复制

或者,您可以使用嵌入类型方法:

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

type ModelA struct {
    ModelC
    FiledA string
}

type ModelB struct {
    ModelC
    FiledB string
}
登录后复制

在这种情况下,在嵌入式 ModelC 结构中定义 Save() 方法:

func (c ModelC) Save() {
    // Implementation
}
登录后复制

虽然这种方法看起来很简单,但需要注意的是,o.Insert(this) 语句只会插入 ModelC 上定义的字段,而不是那些在 ModelA 和 ModelB 上。

因此,当您仍然需要显式引用嵌入类型时,建议避免使用嵌入。在这种情况下,接口方法提供了更大的灵活性。

以上是如何高效地为不同字段的 Go 结构体添加共享功能?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板