22 lines
446 B
Go
22 lines
446 B
Go
package serialization
|
|
|
|
import "reflect"
|
|
|
|
func StructToMap(obj interface{}) map[string]interface{} {
|
|
out := make(map[string]interface{})
|
|
v := reflect.ValueOf(obj)
|
|
if v.Kind() == reflect.Ptr {
|
|
v = v.Elem()
|
|
}
|
|
t := v.Type()
|
|
for i := 0; i < v.NumField(); i++ {
|
|
field := t.Field(i)
|
|
key := field.Tag.Get("json") // 使用 json tag 作为字段名
|
|
if key == "" {
|
|
key = field.Name
|
|
}
|
|
out[key] = v.Field(i).Interface()
|
|
}
|
|
return out
|
|
}
|