avoir du mal à travailler avec des champs struct en utilisant reflectpackage. 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).Nameobtenir 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)
reflectpour définir des données était comments.gmane.org/gmane.comp.lang.go.general/35045 , mais même là, il faisaitjson.Unmarshalle sale boulot