package utils import ( "bytes" "encoding/json" "fmt" "reflect" ) var UStruct *StructUtil func init() { UStruct = NewStructUtil() } type StructUtil struct { } func NewStructUtil() *StructUtil { return &StructUtil{} } func (s *StructUtil) Struct2Map(content interface{}) map[string]interface{} { var name map[string]interface{} if marshalContent, err := json.Marshal(content); err != nil { fmt.Println(err) } else { d := json.NewDecoder(bytes.NewReader(marshalContent)) d.UseNumber() // 设置将float64转为一个number if err := d.Decode(&name); err != nil { fmt.Println(err) } else { for k, v := range name { name[k] = v } } } return name } func (s *StructUtil) String2Map(content string) (map[string]interface{}, error) { var name map[string]interface{} d := json.NewDecoder(bytes.NewReader([]byte(content))) d.UseNumber() // 设置将float64转为一个number if err := d.Decode(&name); err != nil { return name, err } else { return name, nil } } func (s *StructUtil) Struct2MapTag(dest *interface{}, tag string) (map[string]interface{}, error) { t := reflect.TypeOf(dest) v := reflect.ValueOf(dest) var m = make(map[string]interface{}) for i := 0; i < t.NumField(); i++ { fieldType := t.Field(i) tag := fieldType.Tag.Get(tag) if tag != "" { m[tag] = v.Field(i).Interface() } } return m, nil }