github.com/wangyougui/gf/v2@v2.6.5/internal/utils/utils_is.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/wangyougui/gf. 6 7 package utils 8 9 import ( 10 "reflect" 11 12 "github.com/wangyougui/gf/v2/internal/empty" 13 ) 14 15 // IsNil checks whether `value` is nil, especially for interface{} type value. 16 func IsNil(value interface{}) bool { 17 return empty.IsNil(value) 18 } 19 20 // IsEmpty checks whether `value` is empty. 21 func IsEmpty(value interface{}) bool { 22 return empty.IsEmpty(value) 23 } 24 25 // IsInt checks whether `value` is type of int. 26 func IsInt(value interface{}) bool { 27 switch value.(type) { 28 case int, *int, int8, *int8, int16, *int16, int32, *int32, int64, *int64: 29 return true 30 } 31 return false 32 } 33 34 // IsUint checks whether `value` is type of uint. 35 func IsUint(value interface{}) bool { 36 switch value.(type) { 37 case uint, *uint, uint8, *uint8, uint16, *uint16, uint32, *uint32, uint64, *uint64: 38 return true 39 } 40 return false 41 } 42 43 // IsFloat checks whether `value` is type of float. 44 func IsFloat(value interface{}) bool { 45 switch value.(type) { 46 case float32, *float32, float64, *float64: 47 return true 48 } 49 return false 50 } 51 52 // IsSlice checks whether `value` is type of slice. 53 func IsSlice(value interface{}) bool { 54 var ( 55 reflectValue = reflect.ValueOf(value) 56 reflectKind = reflectValue.Kind() 57 ) 58 for reflectKind == reflect.Ptr { 59 reflectValue = reflectValue.Elem() 60 reflectKind = reflectValue.Kind() 61 } 62 switch reflectKind { 63 case reflect.Slice, reflect.Array: 64 return true 65 } 66 return false 67 } 68 69 // IsMap checks whether `value` is type of map. 70 func IsMap(value interface{}) bool { 71 var ( 72 reflectValue = reflect.ValueOf(value) 73 reflectKind = reflectValue.Kind() 74 ) 75 for reflectKind == reflect.Ptr { 76 reflectValue = reflectValue.Elem() 77 reflectKind = reflectValue.Kind() 78 } 79 switch reflectKind { 80 case reflect.Map: 81 return true 82 } 83 return false 84 } 85 86 // IsStruct checks whether `value` is type of struct. 87 func IsStruct(value interface{}) bool { 88 var reflectType = reflect.TypeOf(value) 89 if reflectType == nil { 90 return false 91 } 92 var reflectKind = reflectType.Kind() 93 for reflectKind == reflect.Ptr { 94 reflectType = reflectType.Elem() 95 reflectKind = reflectType.Kind() 96 } 97 switch reflectKind { 98 case reflect.Struct: 99 return true 100 } 101 return false 102 }