avoir du mal à travailler avec des champs struct en utilisant reflect
package. en particulier, n'ont pas compris comment définir la valeur du champ.
tapez t struct {fi int; chaîne fs} var rt = t {123, "jblow"} var i64 int64 = 456
obtenir le nom du champ i - cela semble fonctionner
var field = reflect.TypeOf(r).Field(i).Name
obtenir la valeur du champ i comme a) interface {}, b) int - cela semble fonctionner
var iface interface{} = reflect.ValueOf(r).Field(i).Interface()
var i int = int(reflect.ValueOf(r).Field(i).Int())
réglage de la valeur du champ i - essayer un - panique
reflect.ValueOf(r).Field(i).SetInt( i64 )
panique : reflect.Value · SetInt en utilisant la valeur obtenue en utilisant un champ non exporté
en supposant qu'il n'aime pas les noms de champ "id" et "nom", alors renommé en "Id" et "Nom"
a) cette hypothèse est-elle correcte?
b) si correct, jugé inutile car dans le même fichier / package
réglage de la valeur du champ i - essayez deux (avec les noms de champ en majuscule) - panique
reflect.ValueOf(r).Field(i).SetInt( 465 )
reflect.ValueOf(r).Field(i).SetInt( i64 )
panique : reflect.Value · SetInt utilisant une valeur non adressable
Les instructions ci-dessous par @peterSO sont complètes et de haute qualité
Quatre. cela marche:
reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )
il atteste également que les noms de champs doivent être exportables (commencer par une majuscule)
reflect
pour définir des données était comments.gmane.org/gmane.comp.lang.go.general/35045 , mais même là, il faisaitjson.Unmarshal
le sale boulot