tendo dificuldade em trabalhar com campos de estrutura usando reflectpacote. 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).Nameobter 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)
reflectpara definir dados foi comments.gmane.org/gmane.comp.lang.go.general/35045 , mas mesmo lá ele costumavajson.Unmarshalfazer o trabalho sujo