struct_util.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package utils
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "reflect"
  7. )
  8. var UStruct *StructUtil
  9. func init() {
  10. UStruct = NewStructUtil()
  11. }
  12. type StructUtil struct {
  13. }
  14. func NewStructUtil() *StructUtil {
  15. return &StructUtil{}
  16. }
  17. func (s *StructUtil) Struct2Map(content interface{}) map[string]interface{} {
  18. var name map[string]interface{}
  19. if marshalContent, err := json.Marshal(content); err != nil {
  20. fmt.Println(err)
  21. } else {
  22. d := json.NewDecoder(bytes.NewReader(marshalContent))
  23. d.UseNumber() // 设置将float64转为一个number
  24. if err := d.Decode(&name); err != nil {
  25. fmt.Println(err)
  26. } else {
  27. for k, v := range name {
  28. name[k] = v
  29. }
  30. }
  31. }
  32. return name
  33. }
  34. func (s *StructUtil) String2Map(content string) (map[string]interface{}, error) {
  35. var name map[string]interface{}
  36. d := json.NewDecoder(bytes.NewReader([]byte(content)))
  37. d.UseNumber() // 设置将float64转为一个number
  38. if err := d.Decode(&name); err != nil {
  39. return name, err
  40. } else {
  41. return name, nil
  42. }
  43. }
  44. func (s *StructUtil) Struct2MapTag(dest *interface{}, tag string) (map[string]interface{}, error) {
  45. t := reflect.TypeOf(dest)
  46. v := reflect.ValueOf(dest)
  47. var m = make(map[string]interface{})
  48. for i := 0; i < t.NumField(); i++ {
  49. fieldType := t.Field(i)
  50. tag := fieldType.Tag.Get(tag)
  51. if tag != "" {
  52. m[tag] = v.Field(i).Interface()
  53. }
  54. }
  55. return m, nil
  56. }