Спасибо! Теперь, когда я прочитал заметки 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 )

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

Ответы на вопрос(2)

Ваш ответ на вопрос