trans.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package utils
  2. import (
  3. "fmt"
  4. "reflect"
  5. "strings"
  6. )
  7. func ReflectTrans(obj interface{}) {
  8. v := reflect.ValueOf(obj).Elem()
  9. t := v.Type()
  10. data := make(map[string]string)
  11. for k := 0; k < t.NumField(); k++ {
  12. if t.Field(k).Type.Kind() == reflect.Bool {
  13. key := fmt.Sprintf("%sStr", t.Field(k).Name)
  14. value := "no"
  15. if v.Field(k).Interface().(bool) {
  16. value = "yes"
  17. }
  18. data[key] = value
  19. }
  20. }
  21. for k := 0; k < t.NumField(); k++ {
  22. if value, ok := data[t.Field(k).Name]; ok {
  23. v.Field(k).SetString(value)
  24. if v.Field(k).CanSet() {
  25. v.Field(k).SetString(value)
  26. }
  27. }
  28. }
  29. }
  30. func MapTrans(obj interface{}) {
  31. v := reflect.ValueOf(obj).Elem()
  32. t := v.Type()
  33. data := make(map[string]bool)
  34. for k := 0; k < t.NumField(); k++ {
  35. if v.Field(k).Interface() == "yes" || v.Field(k).Interface() == "no" {
  36. key := strings.TrimSuffix(t.Field(k).Name, "Str")
  37. var value bool
  38. if v.Field(k).Interface().(string) == "yes" {
  39. value = true
  40. } else {
  41. value = false
  42. }
  43. data[key] = value
  44. }
  45. }
  46. for k := 0; k < t.NumField(); k++ {
  47. if value, ok := data[t.Field(k).Name]; ok {
  48. v.Field(k).SetBool(value)
  49. if v.Field(k).CanSet() {
  50. v.Field(k).SetBool(value)
  51. }
  52. }
  53. }
  54. }