In Go erben eingebettete Strukturen die Felder und Methoden ihrer Basisstrukturen. Es kann jedoch zu einem Konflikt kommen, wenn sowohl die Basisstruktur als auch die eingebettete Struktur eine Methode mit demselben Namen implementieren. In diesem Artikel wird eine Lösung untersucht, um die Methode der eingebetteten Struktur zu überschreiben, ohne die Basisstruktur zu beeinträchtigen.
Betrachten Sie den folgenden Code:
<code class="go">package main import "fmt" type Base struct { val int } func (b *Base) Set(i int) { b.val = i } type Sub struct { Base changed bool } func (b *Sub) Set(i int) { b.val = i b.changed = true } func main() { s := &Sub{} s.Base.Set(1) var b *Base = &s.Base // Both print the same value fmt.Printf("%+v\n", b) fmt.Printf("%+v\n", s) }</code>
Hier bettet der Sub-Typ den Basistyp ein. Sowohl Sub als auch Base verfügen über eine Methode namens Set. Wenn Sie s.Base.Set() aufrufen, umgehen Sie die Methode Sub.Set() und rufen direkt die Methode Base.Set() auf.
Zu Wenn Sie die Methode der eingebetteten Struktur überschreiben möchten, können Sie stattdessen die Methode Sub.Set() aufrufen. Wenn in Go ein Typ eine Methode mit demselben Namen wie sein eingebetteter Typ implementiert, wird die eingebettete Methode ausgeblendet.
Hier ist eine aktualisierte Version des Codes:
<code class="go">func (b *Sub) Set(i int) { b.Base.Set(i) // Call the Base.Set() method b.changed = true } func main() { s := &Sub{} s.Set(1) var b *Base = &s.Base // Note: b.val is now 1 // s.changed is now true fmt.Printf("%+v\n", b) fmt.Printf("%+v\n", s) }</code>
In diesem Beispiel Wenn Sie s.Set(1) aufrufen, wird die Methode Sub.Set() aufgerufen, die wiederum die Methode Base.Set() aufruft. Dadurch wird das Val-Feld der in Sub eingebetteten Basisstruktur aktualisiert. Das geänderte Feld wird auch auf „true“ gesetzt, um anzuzeigen, dass der Wert geändert wurde.
Mit dieser Lösung können Sie die Methode der eingebetteten Struktur überschreiben, ohne die Basisstruktur zu beeinträchtigen. Dies ist eine gängige Technik, die in Go verwendet wird, um Wiederverwendbarkeit und Flexibilität des Codes zu erreichen.
Das obige ist der detaillierte Inhalt vonWie überschreibe ich eingebettete Strukturmethoden in Go, ohne die Basisstruktur zu beeinträchtigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!