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。写一个函数。这就是函数的好处:代码重用。(注意,围棋中的代码重用是通过函数实现的,而不是通过继承实现的。)术语是“函数”和“方法”(不是接收方函数和非接收方函数)。