mengalami kesulitan bekerja dengan bidang struct menggunakan reflect
paket. khususnya, belum menemukan cara mengatur nilai bidang.
ketik t struct {fi int; fs string} var rt = t {123, "jblow"} var i64 int64 = 456
mendapatkan Nama bidang i - ini sepertinya berhasil
var field = reflect.TypeOf(r).Field(i).Name
mendapatkan nilai bidang i sebagai a) antarmuka {}, b) int - ini sepertinya berhasil
var iface interface{} = reflect.ValueOf(r).Field(i).Interface()
var i int = int(reflect.ValueOf(r).Field(i).Int())
nilai pengaturan bidang i - coba satu - panik
reflect.ValueOf(r).Field(i).SetInt( i64 )
panic : reflect.Value · SetInt menggunakan nilai yang diperoleh menggunakan bidang yang tidak diekspor
dengan asumsi tidak suka nama kolom "id" dan "name", maka diganti namanya menjadi "Id" dan "Name"
a) apakah asumsi ini benar?
b) jika benar, dianggap tidak perlu karena dalam file / paket yang sama
nilai pengaturan bidang i - coba dua (dengan nama bidang dikapitalisasi) - panik
reflect.ValueOf(r).Field(i).SetInt( 465 )
reflect.ValueOf(r).Field(i).SetInt( i64 )
panic : reflect.Value · SetInt using unaddressable value
Petunjuk di bawah oleh @peterSO dilakukan secara menyeluruh dan berkualitas tinggi
Empat. ini bekerja:
reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )
Ia mendokumentasikan juga bahwa nama bidang harus dapat diekspor (dimulai dengan huruf kapital)
reflect
untuk mengatur data adalah comments.gmane.org/gmane.comp.lang.go.general/35045 , tetapi bahkan di sana dia biasajson.Unmarshal
melakukan pekerjaan kotor yang sebenarnya