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



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


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
}

结构AABB都有Get功能,以满足接口I,这可能是一个愚蠢的问题,但我不知道如何简化它们以消除两个Get函数的重复,尝试:

  1. 具有通用结构并嵌入A&B- 由于无法执行此操作 到我使用的系统中的 json 序列化。
  2. BB中嵌入AA并调用AA.Get- 不起作用,因为名称在B内部而不是A
  3. AABBresourceAresourceB这两个字段结合起来 - 这使Get函数复杂化,因为那时它需要处理
  4. 创建一个非接收器函数并将其用于AABB- 这可以工作,但由于我需要很多字段,而不仅仅是name,所以该函数最终会有很多参数。

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

非常感谢!

[更新]

我正在尝试创建一个 Kubernetes 运算符,它有一些 CRD(自定义资源定义(,并且由于我创建了一个通用控制器,它只接受 CRD 并调用它们的函数(这就是我有接口的原因(,但我发现我需要实现完全相同的函数,例如GetNameGetObject或一些操作数据并返回结果的函数, 它们在这些 CRD 结构中都是一样的。

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

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

最新更新