YiTao/util/obj.go

33 lines
665 B
Go
Raw Normal View History

2024-11-09 14:59:27 +08:00
package util
import (
"reflect"
)
// 删除一个 struct 中为 nil 或 "" 的元素
func DeleteNilItems(obj interface{}) interface{} {
sVal := reflect.ValueOf(obj)
sType := reflect.TypeOf(obj)
var returnMap map[string]interface{}
returnMap = make(map[string]interface{})
if sType.Kind() == reflect.Ptr {
//用Elem()获得实际的value
sVal = sVal.Elem()
sType = sType.Elem()
}
num := sVal.NumField()
for i := 0; i < num; i++ {
f := sType.Field(i)
val := sVal.Field(i).Interface()
switch val.(type) {
case string:
if val.(string) != "" {
returnMap[f.Name] = val
}
default:
returnMap[f.Name] = val
}
}
return returnMap
}