Mar*_*ars 3 interface embedding go
我有一个XY类型,有各种领域和方法(几十个).
type XY struct {
    Name      string
    SomeValue int
    ...
}
func (xy *XY) Do1() { ... }
func (xy *XY) Do2() { ... }
func (xy *XY) Do3() { ... }
...
现在我想定义一个嵌入XY的第二种类型,保留所有字段和方法.但我确实想修改一些功能.
type AB struct {
    XY
}
func (ab *AB) Do2() { ... }
到现在为止还挺好.现在我想将AB传递给一个带XY的函数.
func SomeFunc(xy *XY) { ... }
而这里是我绊倒的地方,没有多态性.
我可以传递*AB.XY给函数,但不再使用AB的Do2函数了.我可以为它创建一个接口,这可能是预期的方式,但如果SomeFunc需要接近XY的所有函数,比如几乎所有字段的getter,我基本上需要创建一个XY的副本,作为一个接口(可能的用例:我在服务器上,必须以特定方式向客户端发送值).我不想只使它成为一个接口,因为我必须重新定义所有使用该接口的类型的所有字段和函数.
我可以想到这个问题的解决方案,例如将Do2设置为闭包,根据"主机"类型设置,或者设置XY中的枚举字段,并根据该"类型"变量更改Do2的行为,或者使用反射和interface{}在SomeFunc中,但我想知道Go中的"正确"方式是什么.即使你有很多功能,你如何以最有效的方式做到这一点?
| 归档时间: | 
 | 
| 查看次数: | 53 次 | 
| 最近记录: |