ai_scheduler/internal/pkg/util/map.go

44 lines
876 B
Go

package util
import (
"encoding/json"
"reflect"
"strings"
)
// StructToMap 将结构体转换为 map[string]any
func StructToMap(v any) (map[string]any, error) {
b, err := json.Marshal(v)
if err != nil {
return nil, err
}
var m map[string]any
err = json.Unmarshal(b, &m)
return m, err
}
func StructToMapWithReflect(obj interface{}) map[string]interface{} {
val := reflect.ValueOf(obj)
if val.Kind() == reflect.Ptr {
val = val.Elem()
}
if val.Kind() != reflect.Struct {
return nil
}
data := make(map[string]interface{})
for i := 0; i < val.NumField(); i++ {
valueField := val.Field(i)
typeField := val.Type().Field(i)
jsonTag := typeField.Tag.Get("json")
if idx := strings.Index(jsonTag, ","); idx != -1 {
jsonTag = jsonTag[:idx]
}
if !typeField.IsExported() {
continue
}
data[jsonTag] = valueField.Interface()
}
return data
}