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 }