KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
having a rough time working with struct fields using reflect package. in particular, have not figured out how to set the field value. type t struct { fi int; fs string } var r t = t{ 123, "jblow" } var i64 int64 = 456 getting Name of field i - this seems to work var field = reflect.TypeOf(r).Field(i).Name getting value of field i as a) interface{}, b) int - this seems to work var iface interface{} = reflect.ValueOf(r).Field(i).Interface() var i int = int(reflect.ValueOf(r).Field(i).Int()) setting value of field i - try one - panic reflect.ValueOf(r).Field(i).SetInt( i64 ) panic : reflect.Value·SetInt using value obtained using unexported field assuming it did not like field names "id" and "name", so renamed to "Id" and "Name" a) is this assumption correct? b) if correct, thought not necessary since in same file / package setting value of field i - try two (with field names capitalized ) - panic reflect.ValueOf(r).Field(i).SetInt( 465 ) reflect.ValueOf(r).Field(i).SetInt( i64 ) panic : reflect.Value·SetInt using unaddressable value Instructions below by @peterSO are thorough and high quality Four. this works: reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 ) he documents as well that the field names must be exportable (begin with capital letter)
Tags (comma-separated)
Save Edits
Cancel