Wenn in Go eine Struktur von einer anderen Struktur erbt (bekannt als Einbettung), erbt sie alle Felder und Methoden der eingebetteten Struktur Struktur. Wenn die erbende Struktur jedoch eine eigene Methode mit demselben Namen wie eine in der eingebetteten Struktur definiert, wird die eingebettete Methode ausgeblendet bzw. im Schatten angezeigt.
Überschreiben von a -Methode in der eingebetteten Struktur beinhaltet den expliziten Zugriff auf die Methode der eingebetteten Struktur mithilfe der Syntax:
<code class="go">yourStruct.EmbeddedStruct.method()</code>
Zum Beispiel:
<code class="go">type Base struct { val int } func (b *Base)Set(i int) { b.val = i } type Sub struct { Base changed bool }</code>
Hier bettet Sub Base ein. Die Set-Methode von Sub überschreibt jedoch die Set-Methode von Base. Um die ursprüngliche Set-Methode von Base aus Sub heraus aufzurufen, müsste man b.Base.Set(i) explizit aufrufen.
Bedenken Sie den folgenden Code:
<code class="go">func t16() { s := &Sub{} s.Set(1) var b *Base = &s.Base fmt.Printf("%+v\n", b) fmt.Printf("%+v\n", s) }</code>
Zunächst wird die Set-Methode von Sub aufgerufen, die die Set-Methode von Base überschreibt. Um das ursprüngliche Verhalten der Set-Methode von Base zu demonstrieren, kann man s.Base.Set(10) aufrufen:
<code class="go">func t16() { s := &Sub{} s.Base.Set(10) var b *Base = &s.Base fmt.Printf("%+v\n", b) fmt.Printf("%+v\n", s) }</code>
Dadurch wird sichergestellt, dass die ursprüngliche Set-Methode von Base aufgerufen wird und die benutzerdefinierte Set-Methode von Sub und deren anschließende Änderung umgangen werden von geändert.
Das obige ist der detaillierte Inhalt vonWie überschreibe ich eingebettete Strukturmethoden in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!