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  }