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() }
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:
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!