gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/schemax/basickind/desc-basic-kind.go (about) 1 package basickind 2 3 import ( 4 "gitee.com/zhongguo168a/gocodes/datax/convertx" 5 "reflect" 6 "strconv" 7 ) 8 9 type Kind int 10 11 const ( 12 Invalid Kind = iota 13 Bool //1 14 Int8 15 Int16 16 Int32 17 Int64 //5 18 Uint8 19 Uint16 20 Uint32 21 Uint64 22 Float32 //10 23 Float64 24 String 25 Bytes //13 26 ) 27 28 var kindNames = []string{ 29 Invalid: "invalid", 30 Bool: "bool", 31 Int8: "int8", 32 Int16: "int16", 33 Int32: "int32", 34 Int64: "int64", 35 Uint8: "uint8", 36 Uint16: "uint16", 37 Uint32: "uint32", 38 Uint64: "uint64", 39 Float32: "float32", 40 Float64: "float64", 41 String: "string", 42 Bytes: "bytes", 43 } 44 45 func (k Kind) String() string { 46 if int(k) < len(kindNames) { 47 return kindNames[k] 48 } 49 return "kind" + strconv.Itoa(int(k)) 50 } 51 func NameToValue(name string) Kind { 52 for key, val := range kindNames { 53 if val == name { 54 return Kind(key) 55 } 56 } 57 return Invalid 58 } 59 60 func DefaultValue(typ Kind) interface{} { 61 switch typ { 62 case Bool: 63 return false 64 case Int8: 65 return 0 66 case Int16: 67 return 0 68 case Int32: 69 return 0 70 case Int64: 71 return 0 72 case Uint8: 73 return uint(0) 74 case Uint16: 75 return uint(0) 76 case Uint32: 77 return uint(0) 78 case Uint64: 79 return uint(0) 80 case Float32: 81 return float64(0) 82 case Float64: 83 return float64(0) 84 case String: 85 return "" 86 } 87 return nil 88 } 89 90 func ConvertKindToStruct(kind Kind, val interface{}) (r interface{}) { 91 switch kind { 92 case Bool: 93 r = convertx.AnyToBool(val) 94 case Int8: 95 r = convertx.AnyToInt(val) 96 case Int16: 97 r = convertx.AnyToInt(val) 98 case Int32: 99 r = convertx.AnyToInt(val) 100 case Int64: 101 r = convertx.AnyToInt(val) 102 case Uint8: 103 r = convertx.AnyToUint(val) 104 case Uint16: 105 r = convertx.AnyToUint(val) 106 case Uint32: 107 r = convertx.AnyToUint(val) 108 case Uint64: 109 r = convertx.AnyToUint(val) 110 case Float32: 111 r = convertx.AnyToFloat64(val) 112 case Float64: 113 r = convertx.AnyToFloat64(val) 114 case String: 115 r = convertx.AnyToString(val) 116 } 117 118 return 119 } 120 121 func NameToBasicKind(val string) (r Kind) { 122 switch val { 123 case "string": 124 return String 125 case "bool": 126 return Bool 127 case "int8": 128 return Int8 129 case "int16": 130 return Int16 131 case "int32": 132 return Int32 133 case "int64": 134 return Int64 135 case "int": 136 return Int64 137 case "uint8": 138 return Uint8 139 case "uint16": 140 return Uint16 141 case "uint32": 142 return Uint32 143 case "uint64": 144 return Uint64 145 case "uint": 146 return Uint64 147 case "float32": 148 return Float32 149 case "float64": 150 return Float64 151 } 152 return Invalid 153 } 154 155 func GetBasicKind(val interface{}) (r Kind) { 156 switch val.(type) { 157 case string: 158 return String 159 case bool: 160 return Bool 161 case int8: 162 return Int8 163 case int16: 164 return Int16 165 case int32: 166 return Int32 167 case int64: 168 return Int64 169 case int: 170 return Int64 171 case uint8: 172 return Uint8 173 case uint16: 174 return Uint16 175 case uint32: 176 return Uint32 177 case uint64: 178 return Uint64 179 case uint: 180 return Uint64 181 case float32: 182 return Float32 183 case float64: 184 return Float64 185 } 186 return Invalid 187 } 188 189 func ReflectKindToBasicKind(kind reflect.Kind) (r Kind) { 190 switch kind { 191 case reflect.String: 192 return String 193 case reflect.Bool: 194 return Bool 195 case reflect.Int8: 196 return Int8 197 case reflect.Int16: 198 return Int16 199 case reflect.Int32: 200 return Int32 201 case reflect.Int64: 202 return Int64 203 case reflect.Int: 204 return Int64 205 case reflect.Uint8: 206 return Uint8 207 case reflect.Uint16: 208 return Uint16 209 case reflect.Uint32: 210 return Uint32 211 case reflect.Uint64: 212 return Uint64 213 case reflect.Uint: 214 return Uint64 215 case reflect.Float32: 216 return Float32 217 case reflect.Float64: 218 return Float64 219 } 220 return Invalid 221 }