github.com/best4tires/kit@v1.0.5/convert/int.go (about) 1 // Package convert contains functions to convert interface{} values into various other types 2 package convert 3 4 import ( 5 "database/sql" 6 "strconv" 7 ) 8 9 // ToInt tries to convert v into an int 10 func ToInt(v interface{}) (int, bool) { 11 switch v := v.(type) { 12 case int: 13 return v, true 14 case int8: 15 return int(v), true 16 case int16: 17 return int(v), true 18 case int32: 19 return int(v), true 20 case int64: 21 return int(v), true 22 case uint8: 23 return int(v), true 24 case uint16: 25 return int(v), true 26 case uint32: 27 return int(v), true 28 case uint64: 29 return int(v), true 30 case float32: 31 return int(v), true 32 case float64: 33 return int(v), true 34 case bool: 35 switch v { 36 case true: 37 return 1, true 38 default: 39 return 0, true 40 } 41 case string: 42 n, err := strconv.ParseInt(v, 10, 64) 43 if err != nil { 44 return 0, false 45 } 46 return int(n), true 47 48 case sql.NullString: 49 return ToInt(v.String) 50 case sql.NullInt64: 51 return ToInt(v.Int64) 52 case sql.NullInt32: 53 return ToInt(v.Int32) 54 case sql.NullInt16: 55 return ToInt(v.Int16) 56 case sql.NullFloat64: 57 return ToInt(v.Float64) 58 case sql.NullBool: 59 return ToInt(v.Bool) 60 case sql.NullTime: 61 return ToInt(v.Time) 62 case *sql.NullString: 63 return ToInt(v.String) 64 case *sql.NullInt64: 65 return ToInt(v.Int64) 66 case *sql.NullInt32: 67 return ToInt(v.Int32) 68 case *sql.NullInt16: 69 return ToInt(v.Int16) 70 case *sql.NullFloat64: 71 return ToInt(v.Float64) 72 case *sql.NullBool: 73 return ToInt(v.Bool) 74 case *sql.NullTime: 75 return ToInt(v.Time) 76 77 default: 78 return 0, false 79 } 80 }