avere un brutto periodo di lavoro con i campi struct usando reflectpackage. in particolare, non ho capito come impostare il valore del campo.
digitare t struct {fi int; fs string}
var rt = t {123, "jblow"}
var i64 int64 = 456
ottenere il nome del campo i - questo sembra funzionare
var field = reflect.TypeOf(r).Field(i).Nameottenere il valore del campo i come a) interfaccia {}, b) int - questo sembra funzionare
var iface interface{} = reflect.ValueOf(r).Field(i).Interface()var i int = int(reflect.ValueOf(r).Field(i).Int())impostazione del valore del campo i - prova uno - panico
reflect.ValueOf(r).Field(i).SetInt( i64 )panic : reflection.Value · SetInt utilizzando il valore ottenuto utilizzando un campo non esportato
supponendo che non gli piacciano i nomi dei campi "id" e "name", quindi rinominati in "Id" e "Name"
a) questa ipotesi è corretta?
b) se corretto, ritenuto non necessario poiché nello stesso file / pacchetto
impostazione del valore del campo i - provare due (con i nomi dei campi in maiuscolo) - panico
reflect.ValueOf(r).Field(i).SetInt( 465 )reflect.ValueOf(r).Field(i).SetInt( i64 )panic : reflection.Value · SetInt utilizzando un valore non indirizzabile
Le istruzioni riportate di seguito da @peterSO sono complete e di alta qualità
Quattro. questo funziona:
reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )
documenta anche che i nomi dei campi devono essere esportabili (iniziano con la lettera maiuscola)
reflectper impostare i dati era comments.gmane.org/gmane.comp.lang.go.general/35045 , ma anche lì facevajson.Unmarshalil lavoro sporco vero e proprio