Golang e herança
Quero fornecer uma estrutura básica com métodos na minha biblioteca que possam ser 'estendidos'.
Os métodos dessa estrutura base dependem de métodos da estrutura de extensão. Isso não é diretamente possível no Go, porque os métodos struct só têm acesso aos próprios campos das estruturas, não às estruturas pai.
O ponto é ter uma funcionalidade que não preciso repetir em cada classe de extensão.
Eu vim com esse padrão, que funciona bem, mas parece bastante complicado devido à sua estrutura cíclica.
Eu nunca encontrei nada parecido em outro código Go. Isso é muito difícil? Que abordagem diferente eu poderia adotar?
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
}