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)
 
     
     
     
     
    