трудно работать с полями структуры с использованием пакета reflect
. в частности, не придумали, как задать значение поля.
type t struct { fi int; fs string } var r t = 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
для установки данных, были комментарии . gmane.org/gmane.comp.lang.go.general/35045, но даже там он использовалjson.Unmarshal
для выполнения самой грязной работы - person cc young   schedule 19.06.2011