github.com/go-board/x-go@v0.1.2-0.20220610024734-db1323f6cb15/types/primitive.go (about) 1 package types 2 3 import ( 4 "reflect" 5 ) 6 7 // IsPrimitiveType return whether type of v is primitive type or not. 8 func IsPrimitiveType(v interface{}) bool { 9 rt := reflect.TypeOf(v) 10 if rt.Kind() == reflect.Ptr { 11 rt = rt.Elem() 12 } 13 k := rt.Kind() 14 return k == reflect.Int || k == reflect.Int8 || k == reflect.Int16 || k == reflect.Int32 || k == reflect.Int64 || 15 k == reflect.Uint || k == reflect.Uint8 || k == reflect.Uint16 || k == reflect.Uint32 || k == reflect.Uint64 || k == reflect.Uintptr || 16 k == reflect.Complex64 || k == reflect.Complex128 || 17 k == reflect.Float32 || k == reflect.Float64 || k == reflect.Bool || k == reflect.String 18 } 19 20 // ZeroValue generate zero value of given data. 21 // For example: 22 // give int 8 will generate int 0 23 // give string "hello" will generate string "" 24 // give struct User{name: "lily", age: 123} will generate struct User{} 25 func ZeroValue(v interface{}) interface{} { 26 return reflect.Zero(reflect.TypeOf(v)).Interface() 27 } 28 29 // IsSameType check a's runtime type equal b's runtime type 30 func IsSameType(a interface{}, b interface{}) bool { 31 ra := reflect.TypeOf(a) 32 pa := false 33 if ra.Kind() == reflect.Ptr { 34 ra = ra.Elem() 35 pa = true 36 } 37 rb := reflect.TypeOf(b) 38 pb := false 39 if rb.Kind() == reflect.Ptr { 40 rb = rb.Elem() 41 pb = true 42 } 43 return pa == pb && ra.Kind() == rb.Kind() 44 }