go - 具有相同接收器函数实现的两个结构,如何删除重复项

标签 go struct

我有两个具有相同接收器函数实现的结构:


type A struct {
    name string
    // other fields
}

type B struct {
    name string
    // other fields
}

type AA struct {
    resource A
}

func (a *AA) Get() string {
    // process something with a.resource.name
    return a.resource.name
}

type BB struct {
    resource B
}

func (b *BB) Get() string {
    // process something with b.resource.name
    return b.resource.name
}

type I interface {
    Get() string
}

两个结构AABBGet函数,为了满足接口(interface)I ,这可能是一个愚蠢的问题,但我不知道如何简化它们以删除两个 Get 的重复项功能,尝试:
  • 具有通用结构并嵌入 A & B - 由于无法做到这一点
    到我使用的系统中的 json 序列化。
  • 嵌入式 AABB并调用 AA.Get - 因为名字在B里面所以不能工作而不是 A
  • 结合AABB两个字段都像 resourceAresourceB - 这使 Get 变得复杂函数,此后需要处理
  • 创建一个非接收函数并将其用于AABB - 这可以工作,但因为我需要很多字段,而不仅仅是name , 所以这个函数最终会得到很多参数。

  • 我不能停止觉得应该有一个更简单的方法,并且还尝试/谷歌搜索一种简化它的方法,但它们似乎都不起作用,有人可以给我一些方向或提示吗?

    非常感激!

    [更新]

    我正在尝试创建一个 Kubernetes 运算符(operator),它有一些 CRD(自定义资源定义),并且因为我创建了一个通用 Controller ,它只接受 CRD 并调用它们的函数(这就是我有接口(interface)的原因),但我发现我需要实现完全相同的功能,如GetName , GetObject ,或一些操作数据并返回结果的函数,它们在这些 CRD 结构中都是相同的。

    最佳答案

    我决定只创建一个接受所需参数的函数,并在结构中重用该函数,感谢所有评论。

    如果您有其他建议,请随时发表评论或建议,谢谢!

    关于go - 具有相同接收器函数实现的两个结构,如何删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62390560/

    相关文章:

    json - Golang 中的动态 JSON 结构未按预期运行

    go - 去模板和制表符

    c - 为 'struct ** record' 的属性赋值

    c++ - 如何迭代结构中的 vector ?

    Dockerizing 一个面向包的设计去模块应用程序

    go - CGo不在同一目录中编译C文件

    go - 我们如何在 kafka 中快速写入单条消息(不是批量消息)?

    c - 警告 : assignment makes pointer from integer without a cast in struct

    c - 在函数的返回类型中定义结构

    c - 为什么这个整数会自己递减?