Heim >Backend-Entwicklung >Golang >Go und Vererbung: Wann übertrifft die Komposition die Vererbung für die Wiederverwendbarkeit von Code?
In Go wird die Erweiterung der Funktionalität über Basisstrukturen hinaus oft mithilfe von Komposition statt Vererbung angegangen. Dies sorgt für Codeklarheit und minimiert Duplikate.
Betrachten Sie das folgende Beispiel, bei dem das Ziel darin besteht, eine Basisstruktur mit Methoden zu definieren, die durch andere Strukturen erweitert werden können:
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 }
Während dieses Beispiel funktioniert Aufgrund seiner zyklischen Struktur erscheint es jedoch verworren. Um die Codeduplizierung zu reduzieren und besser lesbaren Code zu erstellen, sollten Sie die Verwendung von Einbettung in Betracht ziehen.
Einbettung ermöglicht es Ihnen, Strukturen zu erstellen, die bestimmte Schnittstellen implementieren. Sie könnten beispielsweise schmale Schnittstellen zum Lesen und Schreiben erstellen:
type Reader interface { Read(p []byte) (n int, err error) } type Writer interface { Write(p []byte) (n int, err error) }
Durch die Erstellung dieser Schnittstellen können Sie eine ReadWriter-Schnittstelle erstellen:
type ReadWriter interface { Reader Writer }
Auf ähnliche Weise können Sie Strukturen erstellen, die Implementieren Sie Reader und Writer in eine MyReadWriter-Struktur:
type MyReader struct {} func (r *MyReader) Read(p []byte) (n int, err error) { // Implements Reader interface. } type MyWriter struct {} func (w *MyWriter) Write(p []byte) (n int, err error) { // Implements Writer interface. } type MyReadWriter struct { *MyReader *MyWriter }
Die MyReadWriter-Struktur jetzt implementiert die ReadWriter-Schnittstelle, sodass Sie jede Komponente, die Reader oder Writer implementiert, innerhalb dieser Struktur verwenden können.
Diese Einbettungstechnik fördert die Wiederverwendbarkeit von Code, die Abhängigkeitsinjektion und erleichtert das Testen, indem sie den Austausch von Komponenten ermöglicht, die bestimmte Schnittstellen implementieren.
Das obige ist der detaillierte Inhalt vonGo und Vererbung: Wann übertrifft die Komposition die Vererbung für die Wiederverwendbarkeit von Code?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!