грубо работают с полями структуры с использованием пакета Reflect
. в частности, не выяснили, как установить значение поля.
type t struct { fi int; fs string } var r t = t{ 123, "jblow" } var i64 int64 = 456
получение имени поля i - похоже, это работает
var field =lect.TypeOf (r) .Field (i) .Name
получение значение поля i как a) interface {}, b) int - похоже, это работает
var iface interface {} =lect.ValueOf (r) .Field (i) .Interface ()
var i int = int (Reflect.ValueOf (r) .Field (i) .Int ())
установка значения поля i - попробуйте один - panic
reflection.ValueOf (r) .Field (i) .SetInt (i64)
panic : reflection.Value · SetInt с использованием значения, полученного с использованием неэкспортированного поля
, предполагая, что ему не нравятся имена полей «id» и «name», поэтому переименованы в «Id» и «Name»
а) верно ли это предположение?
б) если верно, сочтено ненужным, так как в том же файле / пакете
установка значения поля i - попробуйте два (с заглавными именами полей) - panic
отразите.ValueOf ( r) .Field (i) .SetInt (465)
Reflect.ValueOf (r) .Field (i) .SetInt (i64)
panic : reflection.Value · SetInt с использованием неадресуемого значения
Instructi нижеприведенные @peterSO подробные и качественные
Четыре. это работает:
lect.ValueOf (& r) .Elem (). Field (i) .SetInt (i64)
он также подтверждает, что имена полей должны быть экспортируемыми (начинаются с заглавной буквы)