// Copyright GoFrame Author(https://goframe.org). All Rights Reserved. // // This Source Code Form is subject to the terms of the MIT License. // If a copy of the MIT was not distributed with this file, // You can obtain one at https://github.com/gogf/gf. package utils import ( "reflect" "github.com/gogf/gf/v2/internal/empty" ) // IsNil checks whether `value` is nil, especially for interface{} type value. func IsNil(value interface{}) bool { return empty.IsNil(value) } // IsEmpty checks whether `value` is empty. func IsEmpty(value interface{}) bool { return empty.IsEmpty(value) } // IsInt checks whether `value` is type of int. func IsInt(value interface{}) bool { switch value.(type) { case int, *int, int8, *int8, int16, *int16, int32, *int32, int64, *int64: return true } return false } // IsUint checks whether `value` is type of uint. func IsUint(value interface{}) bool { switch value.(type) { case uint, *uint, uint8, *uint8, uint16, *uint16, uint32, *uint32, uint64, *uint64: return true } return false } // IsFloat checks whether `value` is type of float. func IsFloat(value interface{}) bool { switch value.(type) { case float32, *float32, float64, *float64: return true } return false } // IsSlice checks whether `value` is type of slice. func IsSlice(value interface{}) bool { var ( reflectValue = reflect.ValueOf(value) reflectKind = reflectValue.Kind() ) for reflectKind == reflect.Ptr { reflectValue = reflectValue.Elem() } switch reflectKind { case reflect.Slice, reflect.Array: return true } return false } // IsMap checks whether `value` is type of map. func IsMap(value interface{}) bool { var ( reflectValue = reflect.ValueOf(value) reflectKind = reflectValue.Kind() ) for reflectKind == reflect.Ptr { reflectValue = reflectValue.Elem() } switch reflectKind { case reflect.Map: return true } return false } // IsStruct checks whether `value` is type of struct. func IsStruct(value interface{}) bool { var reflectType = reflect.TypeOf(value) if reflectType == nil { return false } var reflectKind = reflectType.Kind() for reflectKind == reflect.Ptr { reflectType = reflectType.Elem() reflectKind = reflectType.Kind() } switch reflectKind { case reflect.Struct: return true } return false }