28 lines
776 B
Go
28 lines
776 B
Go
|
package convert
|
|||
|
|
|||
|
import (
|
|||
|
"reflect"
|
|||
|
"strings"
|
|||
|
)
|
|||
|
|
|||
|
func ModelToMap(obj any) map[string]any {
|
|||
|
result := make(map[string]any)
|
|||
|
val := reflect.ValueOf(obj).Elem() // 获取结构体的值
|
|||
|
typ := val.Type() // 获取结构体的类型
|
|||
|
|
|||
|
for i := 0; i < val.NumField(); i++ { // 遍历结构体的每个字段
|
|||
|
field := val.Field(i)
|
|||
|
if !field.IsNil() { // 如果字段不为nil
|
|||
|
fieldType := typ.Field(i)
|
|||
|
tagValue := fieldType.Tag.Get("gorm") // 获取gorm标签值
|
|||
|
key := strings.Split(tagValue, ",")[0] // 假设tag格式为"column:value,other_options"
|
|||
|
if key == "" {
|
|||
|
key = fieldType.Name // 如果没有指定tag,则使用字段名作为key
|
|||
|
}
|
|||
|
result[key] = field.Elem().Interface() // 将字段值存入map
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return result
|
|||
|
}
|