code: func SetField(src interface{}, v reflect.Value, fieldName string) error {
  	field := v.FieldByName(fieldName)
  	if !field.IsValid() {
  		return fmt.Errorf("couldn't find %v field in %T", fieldName, v.Interface())
  	}
  	srcValue := reflect.ValueOf(src)
  	if srcValue.Type().AssignableTo(field.Type()) {
  		field.Set(srcValue)
  		return nil
  	}
  	if srcValue.Type().ConvertibleTo(field.Type()) {
  		field.Set(srcValue.Convert(field.Type()))
  		return nil
  	}
  	return fmt.Errorf("couldn't assign/convert %v to %v", srcValue.Type(), field.Type())
  }
docs: // SetField puts the value of src, into fieldName, which must be a member of v.
  // The value of src must be assignable to the field.