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

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

Barbara Streisand
Freigeben: 2024-12-06 18:36:21
Original
924 Leute haben es durchsucht

Can Embedded Methods in Go Access Parent Object Fields?

Zugriff auf übergeordnete Felder über eingebettete Methoden

Hintergrund

Wenn eingebettete Methoden zur Vereinfachung verwendet werden Bei der objektorientierten Programmierung stellt sich die Frage: Können diese Methoden auf die Felder des übergeordneten Elements zugreifen? Objekt?

Ziel

Das Ziel besteht darin, ein ORM für Go zu erstellen, das das Active Record-Muster nachahmt, an das Methoden wie Save() und Delete() angehängt sind das Objekt, das gespeichert oder gelöscht wird. Dieser Ansatz vereinfacht die Lesbarkeit des Codes und entkoppelt ihn vom zugrunde liegenden Datenspeicher.

Beispiel

Der folgende Code demonstriert eine eingebettete Methode (Test()) im Foo-Typ:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    test := Foo{Bar: &Bar{}, Name: "name"}
    test.Test()
}

type Foo struct {
    *Bar
    Name string
}

func (s *Foo) Method() {
    fmt.Println("Foo.Method()")
}

type Bar struct {
}

func (s *Bar) Test() {
    t := reflect.TypeOf(s)
    v := reflect.ValueOf(s)
    fmt.Printf("model: %+v %+v %+v\n", s, t, v)
    fmt.Println(s.Name)
    s.Method()
}
Nach dem Login kopieren

Frage

Kann die eingebettete Methode (Test()) auf das Namensfeld des übergeordneten (Foo)-Objekts zugreifen?

Antwort

Nein, es gibt in Go keine direkte Möglichkeit für eine eingebettete Methode, dies zu tun auf die Felder seines übergeordneten Objekts zugreifen. Der Empfängertyp der Test()-Methode ist *Bar, während das Zielobjekt vom Typ Foo ist.

Alternative Ansätze

Wenn der Zugriff auf übergeordnete Felder unbedingt erforderlich ist, ist dies möglich Zu den Lösungen gehören:

  • Hinzufügen eines Interface{}-Felds zum eingebetteten Typ und Festlegen auf den enthaltenden Typ währenddessen Initialisierung.
  • Übernahme des Ansatzes von db.Save(user) anstelle von user.Save(), was eine bessere Erweiterbarkeit bietet und das Risiko globaler Statusprobleme verringert.

Das obige ist der detaillierte Inhalt vonKönnen eingebettete Methoden in Go auf übergeordnete Objektfelder zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage