трудно работать с полями структуры с помощью reflect
package. в частности, не придумали, как задать значение поля.
введите t struct {fi int; строка fs} var rt = t {123, "jblow"} var i64 int64 = 456
получение имени поля i - похоже, это работает
var field = reflect.TypeOf(r).Field(i).Name
получение значения поля i как a) interface {}, 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 )
panic : reflection.Value · SetInt с использованием значения, полученного с использованием неэкспортированного поля
предполагая, что ему не нравятся имена полей «id» и «name», поэтому он переименован в «Id» и «Name»
а) верно ли это предположение?
б) если верно, то считал ненужным, поскольку в том же файле / пакете
установка значения поля i - попробуйте два (с заглавными именами полей) - паника
reflect.ValueOf(r).Field(i).SetInt( 465 )
reflect.ValueOf(r).Field(i).SetInt( i64 )
panic : reflection.Value · SetInt с использованием неадресуемого значения
Инструкции, приведенные ниже от @peterSO, являются подробными и качественными
Четыре. это работает:
reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )
он также подтверждает, что имена полей должны быть экспортируемыми (начинаются с заглавной буквы)
reflect
для установки данных, был comments.gmane.org/gmane.comp.lang.go.general/35045 , но даже там онjson.Unmarshal
выполнял настоящую грязную работу