package utils import ( "fmt" "reflect" ) // ToMap 将数据转换为map。假设data是一个结构体。 func ToMap(data interface{}) (map[string]interface{}, error) { // 验证输入类型 kind := reflect.ValueOf(data).Kind() if kind == reflect.Ptr { if reflect.ValueOf(data).IsNil() { return nil, fmt.Errorf("输入数据指针不能为空") } data = reflect.ValueOf(data).Elem().Interface() kind = reflect.ValueOf(data).Kind() } if kind == reflect.Map { mp := data.(map[string]interface{}) return mp, nil } if kind != reflect.Struct { return nil, fmt.Errorf("输入数据类型必须是结构体或map") } mp := make(map[string]interface{}) // 使用反射遍历结构体字段并填充map t := reflect.TypeOf(data) v := reflect.ValueOf(data) for i := 0; i < t.NumField(); i++ { field := t.Field(i) value := v.Field(i) // 将字段名和字段值添加到map中 key := field.Tag.Get("json") if key == "-" { continue } if key == "" { key = field.Name } mp[key] = value.Interface() } return mp, nil }