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