107 lines
1.6 KiB
Go
107 lines
1.6 KiB
Go
package util
|
|
|
|
import "unsafe"
|
|
|
|
type eface struct {
|
|
v int64
|
|
ptr unsafe.Pointer
|
|
}
|
|
|
|
const (
|
|
DefaultBool bool = false
|
|
DefaultString string = ""
|
|
DefaultInt int = 0
|
|
DefaultInt32 int32 = 0
|
|
DefaultInt64 int64 = 0
|
|
DefaultFloat32 float32 = 0
|
|
DefaultFloat64 float64 = 0
|
|
)
|
|
|
|
func DerefBool(p *bool) bool {
|
|
if p != nil {
|
|
return *p
|
|
}
|
|
return DefaultBool
|
|
}
|
|
|
|
func DerefString(p *string) string {
|
|
if p != nil {
|
|
return *p
|
|
}
|
|
return DefaultString
|
|
}
|
|
|
|
func DerefInt(p *int) int {
|
|
if p != nil {
|
|
return *p
|
|
}
|
|
return DefaultInt
|
|
}
|
|
|
|
func DerefInt32(p *int32) int32 {
|
|
if p != nil {
|
|
return *p
|
|
}
|
|
return DefaultInt32
|
|
}
|
|
|
|
func DerefInt64(p *int64) int64 {
|
|
if p != nil {
|
|
return *p
|
|
}
|
|
return DefaultInt64
|
|
}
|
|
|
|
func DerefFloat32(p *float32) float32 {
|
|
if p != nil {
|
|
return *p
|
|
}
|
|
return DefaultFloat32
|
|
}
|
|
|
|
func DerefFloat64(p *float64) float64 {
|
|
if p != nil {
|
|
return *p
|
|
}
|
|
return DefaultFloat64
|
|
}
|
|
|
|
func Int64Slice(v []int64) *[]int64 {
|
|
return &v
|
|
}
|
|
|
|
func DerefInt64Slice(p *[]int64) []int64 {
|
|
if p != nil {
|
|
return *p
|
|
}
|
|
return make([]int64, 0)
|
|
}
|
|
|
|
func DerefStringSlice(p *[]string) []string {
|
|
if p != nil {
|
|
return *p
|
|
}
|
|
return make([]string, 0)
|
|
}
|
|
|
|
// 判断转为any的指针是否为空指针
|
|
func IsElemNil(elem any) bool {
|
|
efaceptr := (*eface)(unsafe.Pointer(&elem))
|
|
if efaceptr == nil || uintptr(efaceptr.ptr) == 0x0 {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
// 判断转为any的切片是否为空切片
|
|
func IsSliceNil(elem any) bool {
|
|
efaceptr := (*eface)(unsafe.Pointer(&elem))
|
|
if efaceptr == nil || uintptr(efaceptr.ptr) == 0x0 {
|
|
return true
|
|
}
|
|
|
|
var sliceInfo = *(*[3]int)(efaceptr.ptr)
|
|
|
|
return sliceInfo[1] == 0
|
|
}
|