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  }