Спасибо! Теперь, когда я прочитал заметки peterSO, в этом есть смысл. Я использовал foo, а не & foo, поэтому не мог быть изменен, и не был уверен, что такое Elem ().
работы с полями структуры с использованиемreflect
пакет. в частности, не выяснили, как установить значение поля.
type t struct { fi int; fs string } var r t = t{ 123, "jblow" } var i64 int64 = 456
получить имя поля я - это похоже на работу
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 )
паника: refle.Value · SetInt, используя значение, полученное с помощью неэкспортированного поля
при условии, что ему не нравятся имена полей «id» и «name», поэтому переименовывается в «Id» и «Name»
а) верно ли это предположение?
б) если правильно, то не нужно, так как в том же файле / пакете
установка значения поля i - попробуйте два (с заглавными буквами имен полей) - паника
reflect.ValueOf(r).Field(i).SetInt( 465 )
reflect.ValueOf(r).Field(i).SetInt( i64 )
паника: refle.Value · SetInt с использованием неадресуемого значения
Инструкции ниже @peterSO являются тщательными и качественными
Четыре. это работает:
reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )
Он также документирует, что имена полей должны быть экспортируемыми (начинаются с заглавной буквы)