package main import ( "fmt" "reflect" ) func setField(obj interface{}, name string, value interface{}) error { v := reflect.ValueOf(obj) if v.Kind() != reflect.Ptr || v.Elem().Kind() != reflect.Struct { return fmt.Errorf("expected pointer to a struct") } v = v.Elem() field := v.FieldByName(name) if !field.IsValid() { return fmt.Errorf("no such field: %s", name) } if !field.CanSet() { return fmt.Errorf("cannot set field: %s", name) } val := reflect.ValueOf(value) if field.Type() != val.Type() { return fmt.Errorf("provided value type (%s) doesn't match field type (%s)", val.Type(), field.Type()) } field.Set(val) return nil }