package set import ( "errors" "reflect" "strconv" ) var ( ErrTypeConvert = errors.New("cannot convert input") ) func Field(dst interface{}, fieldName string, value string) error { valDst := reflect.ValueOf(dst).Elem() dstField := valDst.FieldByName(fieldName) val := reflect.ValueOf(value) if dstField.Kind() != val.Kind() { // try to convert switch dstField.Kind() { case reflect.Int: d, err := strconv.Atoi(value) if err != nil { return ErrTypeConvert } val = reflect.ValueOf(d) case reflect.Float64: f, err := strconv.ParseFloat(value, 64) if err != nil { return ErrTypeConvert } val = reflect.ValueOf(f) default: return ErrTypeConvert } } dstField.Set(val) return nil }