SfondoI metodi incorporati possono accedere ai campi "parent"?
Ho fatto una buona dose di lettura specifiche e test del codice e credo che la risposta è no, ma voglio fare in modo che non mi manca nulla.
Goal
Fondamentalmente, io sto cercando di creare un ORM Record stile attivo per Go, perché mi piace come leggibile è e come astratta è dal suo archivio di dati back-end. Preferisco scrivere user.Save()
rispetto a data.Save(user)
incorporando i metodi CRUD comuni sulla struttura dell'utente.
Esempio
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()
}
http://play.golang.org/p/cWyqqVSKGH
Domanda
C'è un modo per rendere i campi di alto livello (non so cosa il termine corretto in Go è per questi) accessibili da metodi incorporati (ad esempio: s.Name
o s.Method()
?
Grazie per aver donato il tuo tempo a un nuovo Gopher.
Vedere la soluzione per la domanda simile su questa altra discussione: https://stackoverflow.com/questions/22153269/how-to-reflect-fields-of-contain-struct-from-a-method-of-the-embedded -struct? rq = 1 –