tendo dificuldade em trabalhar com campos de estrutura usando reflect
pacote. em particular, não descobri como definir o valor do campo.
tipo t struct {fi int; string fs} var rt = t {123, "jblow"} var i64 int64 = 456
obter o nome do campo i - parece funcionar
var field = reflect.TypeOf(r).Field(i).Name
obter o valor do campo i como a) interface {}, b) int - parece funcionar
var iface interface{} = reflect.ValueOf(r).Field(i).Interface()
var i int = int(reflect.ValueOf(r).Field(i).Int())
definindo valor do campo i - tente um - pânico
reflect.ValueOf(r).Field(i).SetInt( i64 )
panic : reflect.Value · SetInt usando o valor obtido usando o campo não exportado
presumindo que não gostasse dos nomes de campo "id" e "nome", então renomeado para "Id" e "Nome"
a) esta suposição está correta?
b) se correto, achei desnecessário já que no mesmo arquivo / pacote
definir o valor do campo i - tente dois (com os nomes dos campos em maiúsculas) - pânico
reflect.ValueOf(r).Field(i).SetInt( 465 )
reflect.ValueOf(r).Field(i).SetInt( i64 )
panic : reflect.Value · SetInt usando valor não endereçável
As instruções abaixo por @peterSO são completas e de alta qualidade
Quatro. isso funciona:
reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )
Ele documenta também que os nomes dos campos devem ser exportáveis (começar com letra maiúscula)
reflect
para definir dados foi comments.gmane.org/gmane.comp.lang.go.general/35045 , mas mesmo lá ele costumavajson.Unmarshal
fazer o trabalho sujo