package util import ( "fmt" "log" "math/big" "runtime" "strconv" ) // ObjToString obj转string类型 func ObjToString(old interface{}) string { if nil == old { return "" } else { r, _ := old.(string) return r } } // IntAll obj转int func IntAll(num interface{}) int { return IntAllDef(num, 0) } // Int64All obj转int64 func Int64All(num interface{}) int64 { if i, ok := num.(int64); ok { return int64(i) } else if i0, ok0 := num.(int32); ok0 { return int64(i0) } else if i1, ok1 := num.(float64); ok1 { return int64(i1) } else if i2, ok2 := num.(int); ok2 { return int64(i2) } else if i3, ok3 := num.(float32); ok3 { return int64(i3) } else if i4, ok4 := num.(string); ok4 { i64, _ := strconv.ParseInt(i4, 10, 64) //in, _ := strconv.Atoi(i4) return i64 } else if i5, ok5 := num.(int16); ok5 { return int64(i5) } else if i6, ok6 := num.(int8); ok6 { return int64(i6) } else if i7, ok7 := num.(*big.Int); ok7 { in, _ := strconv.ParseInt(fmt.Sprint(i7), 10, 64) return int64(in) } else if i8, ok8 := num.(*big.Float); ok8 { in, _ := strconv.ParseInt(fmt.Sprint(i8), 10, 64) return int64(in) } else { return 0 } } func IntAllDef(num interface{}, defaultNum int) int { if i, ok := num.(int); ok { return int(i) } else if i0, ok0 := num.(int32); ok0 { return int(i0) } else if i1, ok1 := num.(float64); ok1 { return int(i1) } else if i2, ok2 := num.(int64); ok2 { return int(i2) } else if i3, ok3 := num.(float32); ok3 { return int(i3) } else if i4, ok4 := num.(string); ok4 { in, _ := strconv.Atoi(i4) return int(in) } else if i5, ok5 := num.(int16); ok5 { return int(i5) } else if i6, ok6 := num.(int8); ok6 { return int(i6) } else if i7, ok7 := num.(*big.Int); ok7 { in, _ := strconv.Atoi(fmt.Sprint(i7)) return int(in) } else if i8, ok8 := num.(*big.Float); ok8 { in, _ := strconv.Atoi(fmt.Sprint(i8)) return int(in) } else { return defaultNum } } // Catch 出错拦截 func Catch() { if r := recover(); r != nil { log.Println(r) for skip := 0; ; skip++ { _, file, line, ok := runtime.Caller(skip) if !ok { break } go log.Printf("%v,%v\n", file, line) } } }