avere un brutto periodo di lavoro con i campi struct usando reflect
package. 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).Name
ottenere 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)
reflect
per impostare i dati era comments.gmane.org/gmane.comp.lang.go.general/35045 , ma anche lì facevajson.Unmarshal
il lavoro sporco vero e proprio