Heim >Backend-Entwicklung >Golang >Können eingebettete Methoden in Go auf übergeordnete Felder zugreifen?

Können eingebettete Methoden in Go auf übergeordnete Felder zugreifen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-06 06:06:14749Durchsuche

Can Embedded Methods in Go Access Parent Fields?

Zugriff auf übergeordnete Felder über eingebettete Methoden in Go: Ist das machbar?

In Go ermöglichen eingebettete Methoden das Einbetten von Typen in andere Typen und ermöglichen so Wiederverwendung von Code und Bereitstellung einer einfacheren Schnittstelle. Es stellt sich jedoch häufig die Frage: Können eingebettete Methoden auf Felder des übergeordneten Typs zugreifen?

Hintergrund:

Der Einbettungsmechanismus von Go nutzt die Komposition, um die Funktionalität eines Typs ohne zu erweitern Nachlass. Wenn ein Typ eingebettet wird, werden seine Felder und Methoden Teil des Einbettungstyps.

Ziel:

Das Ziel dieser Frage bezieht sich auf die Erstellung eines ORM im Active Record-Stil für Go, wo Methoden in die Benutzerstruktur eingebettet sind, um den Datenspeicher zu abstrahieren Operationen.

Beispiel:

type Foo struct {
    *Bar
    Name string
}

func (s *Foo) Method() {
    // How to access "Name" field from this embedded method?
}

Frage:

Gibt es eine Möglichkeit, Felder der obersten Ebene zu erstellen ( übergeordnete Felder), auf die über eingebettete Methoden wie s.Name oder call zugegriffen werden kann s.Method()?

Antwort:

Go unterstützt den Zugriff auf übergeordnete Felder über eingebettete Methoden nicht nativ. Der Empfänger der eingebetteten Methode ist in diesem Fall streng an den eingebetteten Typ *Bar gebunden. Daher ist ein direkter Zugriff auf übergeordnete Felder nicht möglich.

Alternative Ansätze:

  • Schnittstellenbasierte Lösung:Eine Schnittstelle hinzufügen{} Feld an den eingebetteten Typ an, sodass enthaltende Typen erforderlich sind, um diese Schnittstelle zu implementieren. Dieser Ansatz bietet Zugriff auf den übergeordneten Typ, kann jedoch zusätzliche Komplexität hinzufügen.
  • Geänderte API-Struktur: Erwägen Sie die Strukturierung der API als db.Save(user) statt als user.Save(). Dieser Ansatz entspricht Gos idiomatischer Verwendung von Funktionsaufrufen und verarbeitet mehrere Datenbanken ordnungsgemäß.

Das obige ist der detaillierte Inhalt vonKönnen eingebettete Methoden in Go auf übergeordnete Felder zugreifen?. 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