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 }