我希望在我的库中提供一个基础结构和方法,可以通过“扩展”来实现。
这个基础结构的方法依赖于扩展结构中的方法。 在Go语言中,这不是直接可能的,因为结构体方法只能访问自己的字段,不能访问父级结构体。
关键在于拥有功能,而无需在每个扩展类中都重复编写。
我想出了这个模式,它运行良好,但由于其循环结构而看起来相当复杂。
我从未在其他Go代码中找到过类似的东西。 这是否非常不符合Go语言的特点? 我可以采用什么不同的方法?
type MyInterface interface {
SomeMethod(string)
OtherMethod(string)
}
type Base struct{
B MyInterface
}
func (b *Base) SomeMethod(x string) {
b.B.OtherMethod(x)
}
type Extender struct {
Base
}
func (b *Extender) OtherMethod(x string) {
// Do something...
}
func NewExtender() *Extender {
e := Extender{}
e.Base.B = &e
return &e
}
A
和B
中嵌入了一些类型Base
,那么它们可以直接在它们的方法中访问Base
的导出字段。如果Base
有一个方法One
,而你想要重写它,你可以在A
中重新定义它,并且仍然可以从那个上下文中调用A.Base.One()
,就像在那些面向对象的语言中一样。 - evanmcdonnal