avoir un moment difficile de travailler avec struct champs à l'aide d' reflect
package. en particulier, n'ont pas compris comment définissez la valeur de champ.
t de type struct { fi int; fs string } var r t = t{ 123, "jblow" } var i64 int64 = 456
-
obtenir le Nom de domaine i - cela semble fonctionner
var field = reflect.TypeOf(r).Field(i).Name
-
l'obtention de la valeur d'un champ qu'un i) de l'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 de champ i - essayez une panique
reflect.ValueOf(r).Field(i).SetInt( i64 )
panique: réfléchir.Valeur·SetInt à l'aide de la valeur obtenue à l'aide de désexporter champ
en supposant qu'il n'aimait pas les noms des champs "id" et "nom", alors renommé "Id" et "Nom"
a) cette hypothèse est correcte?
b) si elle est correcte, pensais pas nécessaire, puisque dans le même fichier / package
-
réglage de la valeur de champ i - essayer les deux (avec des noms de champ en majuscule ) - panique
reflect.ValueOf(r).Field(i).SetInt( 465 )
reflect.ValueOf(r).Field(i).SetInt( i64 )
panique: réfléchir.Valeur·SetInt à l'aide de unaddressable valeur
Les Instructions ci-dessous par @peterSO sont complets et de haute qualité
Quatre. ceci fonctionne:
reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )
il documents ainsi que les noms des champs doivent être exportable (commencer avec une lettre majuscule)