github.com/whatap/golib@v0.0.22/util/castutil/CastUtil.go (about) 1 package castutil 2 3 import ( 4 "fmt" 5 "strconv" 6 "strings" 7 8 "github.com/whatap/golib/lang/value" 9 ) 10 11 func CInt(val interface{}) (rt int32) { 12 defer func() { 13 if r := recover(); r != nil { 14 //logutil.Println("Recover CaseTuil CInt ", r) 15 rt = 0 16 } 17 }() 18 19 if val == nil { 20 return 0 21 } else { 22 switch val.(type) { 23 case string: 24 v, err := strconv.Atoi(val.(string)) 25 if err != nil { 26 return 0 27 } else { 28 return int32(v) 29 } 30 31 default: 32 return int32(val.(int64)) 33 } 34 } 35 } 36 37 func CInteger(val interface{}) int32 { 38 return CInt(val) 39 } 40 41 func CLong(val interface{}) (rt int64) { 42 defer func() { 43 if r := recover(); r != nil { 44 // logutil.Println("Recover CaseTuil CLong ", r) 45 rt = 0 46 } 47 }() 48 49 if val == nil { 50 return 0 51 } else { 52 switch val.(type) { 53 case string: 54 v, err := strconv.Atoi(val.(string)) 55 if err != nil { 56 return 0 57 } else { 58 return int64(v) 59 } 60 61 default: 62 return int64(val.(int64)) 63 } 64 } 65 66 } 67 68 func CFloat(val interface{}) (rt float32) { 69 defer func() { 70 if r := recover(); r != nil { 71 // logutil.Println("Recover CaseTuil CFloat ", r) 72 rt = 0 73 } 74 }() 75 76 if val == nil { 77 return 0 78 } else { 79 switch val.(type) { 80 case string: 81 v, err := strconv.ParseFloat(val.(string), 32) 82 83 if err != nil { 84 return 0 85 } else { 86 return float32(v) 87 } 88 89 default: 90 return float32(val.(float64)) 91 } 92 } 93 94 } 95 96 func CDouble(val interface{}) (rt float64) { 97 defer func() { 98 if r := recover(); r != nil { 99 // logutil.Println("Recover CaseTuil CDouble ", r) 100 rt = 0 101 } 102 }() 103 104 if val == nil { 105 return 0 106 } else { 107 switch val.(type) { 108 case string: 109 v, err := strconv.ParseFloat(val.(string), 64) 110 if err != nil { 111 return 0 112 } else { 113 return float64(v) 114 } 115 116 default: 117 return float64(val.(float64)) 118 } 119 } 120 121 } 122 123 func ToString(val interface{}) string { 124 return fmt.Sprintln(val) 125 } 126 127 func CString(val interface{}) (rt string) { 128 defer func() { 129 if r := recover(); r != nil { 130 // logutil.Println("CastUtil", "Recover ", r) 131 rt = "" 132 } 133 }() 134 if val == nil { 135 return "" 136 } 137 switch val.(type) { 138 case string: 139 return val.(string) 140 case float32, float64: 141 return strconv.FormatFloat(val.(float64), 'f', 7, 64) 142 default: 143 return fmt.Sprintf("%s", val) 144 } 145 } 146 147 func CBool(val interface{}) (rt bool) { 148 defer func() { 149 if r := recover(); r != nil { 150 // logutil.Println("CastUtil", "Recover ", r) 151 rt = false 152 } 153 }() 154 155 if val == nil { 156 return false 157 } 158 switch val.(type) { 159 case bool: 160 return val.(bool) 161 case *value.BoolValue: 162 return val.(*value.BoolValue).Val 163 case string: 164 return strings.ToLower(val.(string)) == "true" 165 default: 166 return false 167 } 168 }