code: func convertValue(v reflect.Value, to reflect.Type) (reflect.Value, error) {
  	if v.Type().AssignableTo(to) {
  		return v, nil
  	}
  	switch kind := to.Kind(); {
  	case kind == reflect.String:
  		s, err := toString(v)
  		return reflect.ValueOf(s), err
  	case isNumber(kind):
  		return convertNumber(v, kind)
  	default:
  		return reflect.Value{}, errors.Errorf("%s is not assignable to %s", v.Type(), to)
  	}
  }
docs: // We have some different numeric and string types that we try to behave like
  // they were the same.