Utilizando reflect, ¿cómo se configura el valor de un campo de estructura?

teniendo dificultades para trabajar con campos de estructura usandoreflect paquete. en particular, no he descubierto cómo establecer el valor del campo.

type t struct { fi int; fs string }
var r t = t{ 123, "jblow" }
var i64 int64 = 456

getting Nombre del campo i - esto parece funcionar

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

getting value of field i as a) interface {}, b) int - parece que esto funciona

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

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

configurando el valor del campo i - intente uno - panic

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

pánic: reflect.Value · SetInt usando el valor obtenido usando el campo no exportado

asumiendo que no le gustaban los nombres de campo "id" y "name", por lo que cambió su nombre a "Id" y "Name"

a) ¿es correcta esta suposición?

b) si es correcto, pensó que no era necesario ya que en el mismo archivo / paquete

setting value of field i - pruebe dos (con los nombres de campo en mayúscula) - panic

reflect.ValueOf(r).Field(i).SetInt( 465 )

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

pánic: reflect.Value · SetInt usando un valor no direccionable

as @ Instrucciones a continuación de @peterSO son minuciosas y de alta calidad

Cuatro. esto funciona

reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )

también documenta que los nombres de campo deben ser exportables (comience con mayúscula)

Respuestas a la pregunta(2)

Su respuesta a la pregunta