Heim  >  Artikel  >  Backend-Entwicklung  >  Können Properties-Strukturmethoden innerhalb der Node-Struktur vererbt werden, ohne Properties in Go einzubetten?

Können Properties-Strukturmethoden innerhalb der Node-Struktur vererbt werden, ohne Properties in Go einzubetten?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-31 04:49:02624Durchsuche

Can Properties struct methods be inherited within the Node struct without embedding Properties in Go?

Eingebettete Strukturen

In Go bieten eingebettete Strukturen einen Mechanismus zur Wiederverwendung von Methoden zwischen Strukturen. Beim Versuch, Methoden ohne direkte Einbettung zu erben, treten jedoch gewisse Einschränkungen auf.

Anfrage nach alternativen Methoden

Ein Benutzer stellt die Frage: Ist es möglich, Properties-Strukturmethoden zu erben? innerhalb der Node-Struktur ohne Einbettung von Eigenschaften? Der bereitgestellte Beispielcode demonstriert eingebettete Strukturen, was zu der Sorge führt, Eigenschaften innerhalb von Node zu initialisieren.

Adressierung der Schlüsselklärung

Das ultimative Ziel des Benutzers besteht darin, Node als zu definieren Eigenschaftenstruktur, sodass keine Initialisierungen innerhalb von Node erforderlich sind. Der gewünschte Code würde wie folgt aussehen:

<code class="go">package main

import "fmt"

type Properties map[string]interface{}

func (p Properties) GetString(key string) string {
    return p[key].(string)
}

type Nodes map[string]*Node

type Node Properties

func main() {
    allNodes := Nodes{"1": &Node{"test": "foo"}}
    singleNode := allNodes["1"]
    fmt.Println(singleNode.GetString("test"))
}</code>

Die Designauswahl von Go verstehen

Der Benutzer stößt jedoch auf eine Go-Eigenart: Einbetten ist die einzige Methode zur Förderung von Methoden von einer Struktur zur anderen. Während es logisch erscheint, dass ein als Eigenschaften strukturierter Knoten Eigenschaftenmethoden offenlegen sollte, weist die Syntax stattdessen Knoten das Eigenschaftenlayout zu, mit Ausnahme von Methoden.

Untersuchung der Go-Spezifikation

Referenzierung des Go Spezifikation verdeutlicht die folgende Aussage die Situation:

"Der Methodensatz eines Schnittstellentyps ist seine Schnittstelle. Der Methodensatz eines anderen Typs T besteht aus allen mit dem Empfängertyp T deklarierten Methoden."

Daher schließt GetString, das einen Empfängertyp von Properties hat, Node aus.

Zusätzliche Spezifikationen für anonyme Felder

Die Spezifikation geht näher auf anonyme Felder ein (wie Properties innerhalb von Node). ):

"Heraufgestufte Methoden sind wie folgt im Methodensatz der Struktur enthalten:

  • Wenn S ein anonymes Feld T enthält, enthalten die Methodensätze von S und *S beide Hochgestufte Methoden mit Empfänger T.
  • Wenn S ein anonymes Feld T enthält, enthalten die Methodensätze von S und S beide hochgestufte Methoden mit Empfänger T oder *T.

Leider führt dies zur erzwungenen Deklaration von Eigenschaften in jedem Knoten.

Fazit

Zusammenfassend lässt sich sagen, dass eingebettete Strukturen zwar ein Mittel zur Methodenvererbung darstellen, Die direkte Einbettung ist der einzige verfügbare Ansatz in Go. Die Spezifikationen verbieten das gewünschte Verhalten ohne Einbettung.

Das obige ist der detaillierte Inhalt vonKönnen Properties-Strukturmethoden innerhalb der Node-Struktur vererbt werden, ohne Properties in Go einzubetten?. 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