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

Go 两个结构具有相同的接收器函数实现,如何删除重复,go,struct,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

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


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
}
结构
AA
BB
都有
Get
函数,为了满足接口
I
,这可能是一个愚蠢的问题,但我不知道如何简化它们以消除两个
Get
函数的重复,尝试了:

  • 具有泛型结构并嵌入
    a
    B
    中-由于 我使用的系统中的json序列化
  • BB
    中嵌入
    AA
    并调用
    AA.Get
    -不会工作,因为名称在
    B
    中,而不是
    A
  • AA
    BB
    resourceA
    resourceB
    这两个字段组合在一起-这使
    Get
    函数复杂化,因为它需要处理
  • 创建一个非接收器函数,并将其用于
    AA
    BB
    -这可以工作,但由于我需要的字段很多,而不仅仅是
    name
    ,因此该函数最终会有很多参数
  • 我忍不住觉得应该有一个更简单的方法,也尝试/用谷歌搜索一个方法来简化它,但它们似乎都不起作用,有人能给我指一些方向或提示吗

    非常感谢

    [更新]


    我试图创建一个Kubernetes操作符,它有一些CRD(自定义资源定义),由于我创建了一个通用控制器,它只接受CRD并调用它们的函数(这就是为什么我有接口),但我发现我需要实现完全相同的函数,比如
    GetName
    GetObject
    ,或者一些操作数据并返回结果的函数,它们在那些CRD结构中都是相同的。

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


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

    如果这两种方法的实现是相同的,那就意味着潜在的设计缺陷。然而,不可能用一个人为的例子来说明这可能是什么;我们需要看看真正的代码。如果不是因为你的JSON参数,我建议嵌入。看起来A和B有不同的JSON表示。您仍然可以尝试使用自定义解组器处理JSON差异,但我怀疑这不会更干净。您现在拥有的至少更具可读性。这些方法有完全不同的实现。你为什么要把它们结合起来?尤其是因为这些只是一句台词?你的实际问题是什么?@Volker-我展示的示例确实是一行程序,但它们可以更多,它们处理相同的字段,但针对不同的结构,并且处理过程完全相同。这就是为什么我想看看是否有一种简单的方法,当然我可以创建一个非接收器函数,就像我的4所指出的那样,但是我想看看是否有更好的方法……但是很简单:4。写一个函数。这就是函数的好处:代码重用。(注意,围棋中的代码重用是通过函数实现的,而不是通过继承实现的。)术语是“函数”和“方法”(不是接收方函数和非接收方函数)。