fux comb298y

This commit is contained in:
2025-06-14 15:20:36 +08:00
parent c8da895533
commit 6bb7f33864
2 changed files with 35 additions and 12 deletions

View File

@@ -1,19 +1,41 @@
package common
import (
"encoding/json"
"reflect"
)
// StructToMap 将结构体转换为 map[string]interface{}
func StructToMap(data interface{}) (map[string]interface{}, error) {
jsonData, err := json.Marshal(data)
if err != nil {
return nil, err
result := make(map[string]interface{})
// 使用反射获取结构体的值
v := reflect.ValueOf(data)
if v.Kind() == reflect.Ptr {
v = v.Elem()
}
if v.Kind() != reflect.Struct {
return nil, nil
}
var result map[string]interface{}
if err := json.Unmarshal(jsonData, &result); err != nil {
return nil, err
// 遍历结构体字段
t := v.Type()
for i := 0; i < v.NumField(); i++ {
field := t.Field(i)
value := v.Field(i)
// 获取字段名(优先使用 json tag
key := field.Name
if jsonTag := field.Tag.Get("json"); jsonTag != "" && jsonTag != "-" {
key = jsonTag
}
// 处理字段值
if value.IsValid() && !value.IsZero() {
if value.Kind() == reflect.Ptr {
value = value.Elem()
}
result[key] = value.Interface()
}
}
return result, nil