Как установить значение поля структуры с помощью отражения?

грубо работают с полями структуры с использованием пакета Reflect . в частности, не выяснили, как установить значение поля.

type t struct { fi int; fs string }
var r t = t{ 123, "jblow" }
var i64 int64 = 456
  1. получение имени поля i - похоже, это работает

    var field =lect.TypeOf (r) .Field (i) .Name

  2. получение значение поля i как a) interface {}, b) int - похоже, это работает

    var iface interface {} =lect.ValueOf (r) .Field (i) .Interface ()

    var i int = int (Reflect.ValueOf (r) .Field (i) .Int ())

  3. установка значения поля i - попробуйте один - panic

    reflection.ValueOf (r) .Field (i) .SetInt (i64)

    panic : reflection.Value · SetInt с использованием значения, полученного с использованием неэкспортированного поля

    , предполагая, что ему не нравятся имена полей «id» и «name», поэтому переименованы в «Id» и «Name»

    а) верно ли это предположение?

    б) если верно, сочтено ненужным, так как в том же файле / пакете

  4. установка значения поля 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)

он также подтверждает, что имена полей должны быть экспортируемыми (начинаются с заглавной буквы)

93
задан Flimzy 12 July 2017 в 12:03
поделиться