Ich möchte eine Basisstruktur mit Methoden in meiner Bibliothek bereitstellen, die "erweitert" werden kann.Golang und Vererbung
Die Methoden dieser Basisstruktur basieren auf Methoden der Extending-Struktur. Dies ist in Go nicht direkt möglich, da Strukturmethoden nur Zugriff auf die eigenen Felder der Struktur haben, nicht auf Parent-Strukturen.
Der Punkt ist, Funktionalität zu haben, die ich nicht in jeder ausdehnenden Klasse wiederholen muss.
Ich habe dieses Muster gefunden, das gut funktioniert, , aber sieht aufgrund seiner zyklischen Struktur ziemlich verschlungen aus.
Ich habe noch nie so etwas in anderen Go-Code gefunden. Ist das sehr un-gehen? Welchen anderen Ansatz könnte ich nehmen?
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
}
Es ist schwer zu sagen, was Sie von einem generischen Beispiel tun, aber das ist nicht idiomatischer Go-Code. Im Allgemeinen müssen Sie über Lösungen über Klassen und Vererbung insgesamt nachdenken. Verwenden Sie die Komposition zu Ihrem Vorteil, und denken Sie daran, dass nicht alles eine Struktur sein muss, die durch eine Schnittstelle repräsentiert wird - manchmal sind Funktionen alles, was Sie brauchen. – JimB
Redesign Ihrer Lösung. Go hat keine Vererbung. Der Versuch, die Vererbung mit dem, was Go bietet, umzuwandeln, wird höchstwahrscheinlich fehlschlagen. – Volker
Verstehe nicht, warum du abgelehnt wirst; Sie haben gefragt, ob dies ein geeigneter Ansatz ist, und wenn nicht, was Sie tun könnten, um es besser zu machen. Auf die Gefahr hin, wie der seltsame Typ auszusehen, denke ich, dass deine Frage in Ordnung ist. Nachdem das gesagt wurde, trafen die beiden Kommentatoren über mir genau richtig. –