The following code will not run at 10, but will return 0
package main import ( "fmt" "/spf13/cast" ) type UserNum int32 func main() { var uNum UserNum uNum = 10 uNumint64 := cast.ToInt64(uNum) uNumint64E, err := cast.ToInt64E(uNum) (uNumint64) (uNumint64E, err) }
Look at the source code. ToInt64() directly blocks the error. You can use ToInt64E to return a function with error.
// ToInt64 casts an interface to an int64 type. func ToInt64(i interface{}) int64 { v, _ := ToInt64E(i) return v } // ToInt64E casts an interface to an int64 type. func ToInt64E(i interface{}) (int64, error) { i = indirect(i) intv, ok := toInt(i) if ok { return int64(intv), nil } switch s := i.(type) { case int64: return s, nil case int32: return int64(s), nil case int16: return int64(s), nil case int8: return int64(s), nil case uint: return int64(s), nil case uint64: return int64(s), nil case uint32: return int64(s), nil case uint16: return int64(s), nil case uint8: return int64(s), nil case float64: return int64(s), nil case float32: return int64(s), nil case string: v, err := (trimZeroDecimal(s), 0, 0) if err == nil { return v, nil } return 0, ("unable to cast %#v of type %T to int64", i, i) case : return ToInt64E(string(s)) case bool: if s { return 1, nil } return 0, nil case nil: return 0, nil default: return 0, ("unable to cast %#v of type %T to int64", i, i) } }
This is the article about the golang/spf13/cast library that cannot identify custom data types. For more related golang/spf13/cast library content, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!