mirror of
https://gitee.com/johng/gf.git
synced 2024-12-02 04:07:47 +08:00
103 lines
2.3 KiB
Go
103 lines
2.3 KiB
Go
// 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()
|
|
reflectKind = reflectValue.Kind()
|
|
}
|
|
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()
|
|
reflectKind = reflectValue.Kind()
|
|
}
|
|
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
|
|
}
|