Голанг и наследство
Я хочу предоставить базовую структуру с методами в моей библиотеке, которые могут быть «расширены».
Методы этой базовой структуры полагаются на методы из расширяющейся структуры. Это не возможно напрямую в 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
}