Для этого используйте пакет отражение :
func setFields(dst, src interface{}, names ...string) {
d := reflect.ValueOf(dst).Elem()
s := reflect.ValueOf(src).Elem()
for _, name := range names {
df := d.FieldByName(name)
sf := s.FieldByName(name)
switch sf.Kind() {
case reflect.String:
if v := sf.String(); v != "" {
df.SetString(v)
}
// handle other kinds
}
}
}
Вызовите его с указателями на значения:
setFields(&item, &t, "FirstName", "LastName", "Email", "Handle")
Пример игровой площадки
Если вашей реальной целью является перезапись только полей, присутствующих в JSON, то просто сделайте следующее:
item, ok := v.People[params["id"]].
decoder := json.NewDecoder(r.Body)
err := decoder.Decode(&item)
Пример игровой площадки