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)