tener dificultades para trabajar con campos de estructura usando reflect
package. en particular, no he descubierto cómo establecer el valor del campo.
escriba t struct {fi int; cadena de fs} var rt = t {123, "jblow"} var i64 int64 = 456
obteniendo el nombre del campo i - esto parece funcionar
var field = reflect.TypeOf(r).Field(i).Name
obteniendo el valor del campo i como a) interfaz {}, b) int - esto parece funcionar
var iface interface{} = reflect.ValueOf(r).Field(i).Interface()
var i int = int(reflect.ValueOf(r).Field(i).Int())
establecer el valor del campo i - probar uno - pánico
reflect.ValueOf(r).Field(i).SetInt( i64 )
panic : reflect.Value · SetInt usando el valor obtenido usando un campo no exportado
asumiendo que no le gustaron los nombres de campo "id" y "name", por lo que se renombró a "Id" y "Name"
a) ¿Es correcta esta suposición?
b) si es correcto, se cree que no es necesario ya que en el mismo archivo / paquete
establecer el valor del campo i - probar dos (con los nombres de los campos en mayúsculas) - pánico
reflect.ValueOf(r).Field(i).SetInt( 465 )
reflect.ValueOf(r).Field(i).SetInt( i64 )
panic : reflect.Value · SetInt usando un valor no direccionable
Las instrucciones a continuación de @peterSO son completas y de alta calidad
Cuatro. esto funciona:
reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )
También documenta que los nombres de los campos deben ser exportables (comience con mayúscula)
reflect
para establecer datos fue comments.gmane.org/gmane.comp.lang.go.general/35045 , pero incluso allí solíajson.Unmarshal
hacer el trabajo sucio real