маючи орієнтовний час роботи з полями структури за допомогою reflect
пакету. зокрема, не з'ясували, як встановити значення поля.
наберіть t структура {fi int; fs string} var rt = t {123, "jblow"} var i64 int64 = 456
отримання назви поля i - це, здається, працює
var field = reflect.TypeOf(r).Field(i).Name
отримання значення поля i як а) інтерфейсу {}, b) int - це, здається, працює
var iface interface{} = reflect.ValueOf(r).Field(i).Interface()
var i int = int(reflect.ValueOf(r).Field(i).Int())
встановлення значення поля i - спробуйте одне - паніка
reflect.ValueOf(r).Field(i).SetInt( i64 )
паніка : Reflection.Value · SetInt, використовуючи значення, отримані за допомогою експортованого поля
припускаючи, що це не любить назви полів "id" та "name", тому перейменовано на "Id" та "Name"
а) чи правильне це припущення?
б) якщо правильно, то думка не потрібна, оскільки в одному файлі / пакеті
значення параметра поля i - спробуйте два (з великими іменами полів) - паніка
reflect.ValueOf(r).Field(i).SetInt( 465 )
reflect.ValueOf(r).Field(i).SetInt( i64 )
паніка : Reflection.Value · SetInt, використовуючи неадресное значення
Нижче наведені інструкції від @peterSO є ретельними та якісними
Четверо. це працює:
reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )
він також документи, що назви полів повинні бути експортованими (починати з великої літери)
reflect
для встановлення даних, був comments.gmane.org/gmane.comp.lang.go.general/35045 , але навіть там він використовувавjson.Unmarshal
справжню брудну роботу