我有两个具有相同接收器函数实现的结构:
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 结构中都是一样的。
我决定只创建一个接受所需参数的函数,并在结构中重用该函数,感谢所有评论。
如果您有其他建议,请随时发表评论或建议,谢谢!