Heim >Backend-Entwicklung >Golang >Wie können Sie eingebettete Strukturmethoden in Golang überschreiben?

Wie können Sie eingebettete Strukturmethoden in Golang überschreiben?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-27 08:55:30920Durchsuche

How Can You Override Embedded Struct Methods in Golang?

Überschreiben eingebetteter Strukturmethoden in Golang

Wenn in Golang eine Struktur eine andere Struktur einbettet (als Einbettung bezeichnet), werden die Felder der eingebetteten Struktur geändert und Methoden werden für die Einbettungsstruktur direkt zugänglich. Wenn die Einbettungsstruktur jedoch eine Methode aus der eingebetteten Struktur neu definiert, kann sie die ursprüngliche Methode überschreiben.

Bedenken Sie den folgenden Code:

<code class="go">type Base struct {
    val int
}
func (b *Base) Set(i int) {
    b.val = i
}
type Sub struct {
    Base
    changed bool
}</code>

Wir haben Base in Sub eingebettet. Wenn wir nun versuchen, von Sub aus auf die Set-Methode von Base zuzugreifen, wird sie von der Set-Methode von Sub ausgeblendet:

<code class="go">func t16() {
    s := &Sub{}
    // This calls Base's Set method
    s.Base.Set(1) 
    // This causes an error, as s.Set hides Base's Set
    s.Set(10) 
}</code>

Um dieses Verhalten zu überschreiben, können wir die Set-Methode von Sub neu definieren, um die Set-Methode von Base explizit aufzurufen:

<code class="go">func (b *Sub) Set(i int) {
    b.Base.Set(i)
    b.changed = true
}</code>

Wenn wir nun s.Set() aufrufen, wird die Set-Methode von Base aufgerufen, während wir weiterhin Änderungen in Sub verfolgen können.

<code class="go">func t16() {
    s := &Sub{}
    // Calls Sub's overridden Set method
    s.Set(10) 
    fmt.Printf("%+v\n", s) // Output: {Base:{val:10} changed:true}
}</code>

Mit dieser Methode können Sie Folgendes tun Überschreiben Sie die Methoden der eingebetteten Struktur und behalten Sie gleichzeitig den Zugriff auf die ursprüngliche Methode über das eingebettete Strukturfeld bei.

Das obige ist der detaillierte Inhalt vonWie können Sie eingebettete Strukturmethoden in Golang überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn