| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- 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
- }
|