teniendo problemas para trabajar con campos struct usando el paquete reflect
. en particular, no han descubierto cómo establecer el valor del campo.Usando reflect, ¿cómo establece el valor de un campo struct?
type t struct { fi int; fs string } var r t = t{ 123, "jblow" } var i64 int64 = 456
obtener el nombre del campo i - esto parece funcionar
var field = reflect.TypeOf(r).Field(i).Name
obtener el valor de campo i como: a) la 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())
valor de ajuste del campo i - probar uno - pánico
reflect.ValueOf(r).Field(i).SetInt(i64)
pánico: reflect.Value · setInt utilizando el valor obtenido utilizando el campo dejados de
suponiendo que no le gustaba el campo nombres "id" y "nombre", por lo que renombraron a "Id" y "Nombre"
a) ¿Es correcta esta suposición?
b) si es correcto, no se estimó necesario ya que en mismo archivo/paquete
valor de ajuste del campo i - Intento de dos (con nombres de campo en mayúscula) - pánico
reflect.ValueOf(r).Field(i).SetInt(465)
reflect.ValueOf(r).Field(i).SetInt(i64)
pánico: reflejar.Valor · SetInt usando el valor no direccionable
instrucciones de abajo por @peterSO son completa y alta calidad
Four. esto funciona:
reflect.ValueOf(&r).Elem().Field(i).SetInt(i64)
documenta también que los nombres de campo deben ser exportables (comienzan con letra mayúscula)
el ejemplo más cercano que pude encontrar para alguien que usa 'reflect' para establecer datos era http://comments.gmane.org/gmane.comp.lang.go.general/35045, pero incluso allí usó' json.Unmarshal' para hacer el trabajo sucio real –
(el el comentario anterior está obsoleto) –