support int type alias

This commit is contained in:
pengchen 2023-12-11 17:46:46 +08:00
parent 48ddde5701
commit a4672e5660
1 changed files with 17 additions and 5 deletions

View File

@ -462,7 +462,7 @@ func ToIntE(i interface{}) (int, error) {
intv, ok := toInt(i) intv, ok := toInt(i)
if ok { if ok {
return intv, nil return int(intv), nil
} }
switch s := i.(type) { switch s := i.(type) {
@ -1467,19 +1467,31 @@ func jsonStringToObject(s string, v interface{}) error {
// toInt returns the int value of v if v or v's underlying type // toInt returns the int value of v if v or v's underlying type
// is an int. // is an int.
// Note that this will return false for int64 etc. types. // Note that this will return false for int64 etc. types.
func toInt(v interface{}) (int, bool) { func toInt(v interface{}) (int64, bool) {
if i, ok := tryInt64(v); ok {
return i, ok
}
switch v := v.(type) { switch v := v.(type) {
case int: case int:
return v, true return int64(v), true
case time.Weekday: case time.Weekday:
return int(v), true return int64(v), true
case time.Month: case time.Month:
return int(v), true return int64(v), true
default: default:
return 0, false return 0, false
} }
} }
// tryInt64 returns the int64 value of v if v or v's underlying type
func tryInt64(i interface{}) (int64, bool) {
val := reflect.ValueOf(i)
if val.CanInt() {
return val.Int(), true
}
return 0, false
}
func trimZeroDecimal(s string) string { func trimZeroDecimal(s string) string {
var foundZero bool var foundZero bool
for i := len(s); i > 0; i-- { for i := len(s); i > 0; i-- {