33 lines
665 B
Go
33 lines
665 B
Go
|
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
|
||
|
}
|