utils/type.go (111 lines of code) (raw):

package utils import ( "encoding/json" "strconv" ) func ToInt(i interface{}, defaultVal int) int { switch value := i.(type) { case int: return value case float64: return int(value) case uint: return int(value) case int32: return int(value) case int64: return int(value) case string: if val, err := strconv.Atoi(value); err == nil { return val } else { return defaultVal } case json.Number: if val, err := value.Int64(); err == nil { return int(val) } else { return defaultVal } default: return defaultVal } } func ToFloat(i interface{}, defaultVal float64) float64 { switch value := i.(type) { case float64: return value case int: return float64(value) case int32: return float64(value) case int64: return float64(value) case uint32: return float64(value) case uint: return float64(value) case string: if f, err := strconv.ParseFloat(value, 64); err == nil { return f } else { return defaultVal } case json.Number: if f, err := value.Float64(); err == nil { return f } else { return defaultVal } default: return defaultVal } } func ToInt64(i interface{}, defaultVal int64) int64 { switch value := i.(type) { case int: return int64(value) case float64: return int64(value) case uint: return int64(value) case int32: return int64(value) case int64: return value case string: if val, err := strconv.ParseInt(value, 10, 64); err == nil { return val } else { return defaultVal } case json.Number: if val, err := value.Int64(); err == nil { return val } else { return defaultVal } default: return defaultVal } } func ToString(i interface{}, defaultVal string) string { switch value := i.(type) { case int: return strconv.Itoa(value) case float64: return strconv.FormatFloat(value, 'f', -1, 64) case float32: return strconv.FormatFloat(float64(value), 'f', -1, 64) case int32: return strconv.Itoa(int(value)) case int64: return strconv.FormatInt(value, 10) case string: return value case json.Number: return value.String() default: return defaultVal } }