z_test.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package rest
  2. import (
  3. "fmt"
  4. "log"
  5. "reflect"
  6. "testing"
  7. "git.ali33.ru/fcg-xvii/go-tools/json"
  8. )
  9. type Child struct {
  10. ID int64
  11. Name string
  12. }
  13. func NewTFielder() *TFielder {
  14. res := &TFielder{}
  15. res.Fielder = NewFielder(res)
  16. return res
  17. }
  18. type TFielder struct {
  19. *Fielder
  20. ID int64
  21. Name string
  22. NumArr []int64
  23. FloatArr []float64
  24. StrArr []string
  25. AnyArr []any
  26. ChildArr []*Child
  27. //MapInt map[string]int64
  28. }
  29. func TestParse(t *testing.T) {
  30. // int8 в int64
  31. lInt, rInt := byte(10), int64(0)
  32. if err := parseVal(reflect.ValueOf(lInt), reflect.ValueOf(&rInt), "int"); err != nil {
  33. t.Fatal(err)
  34. }
  35. // из строки в строку
  36. lStr, rStr := "copy message", ""
  37. if err := parseVal(reflect.ValueOf(lStr), reflect.ValueOf(&rStr), "string"); err != nil {
  38. t.Fatal(err)
  39. }
  40. // массивы
  41. lArr := []any{"one", "two"}
  42. rArr := []string{}
  43. if err := parseSlice(reflect.ValueOf(lArr), reflect.ValueOf(&rArr), "slice"); err != nil {
  44. t.Fatal(err)
  45. }
  46. // map -> объект
  47. lMap := json.Map{
  48. "id": 10,
  49. "name": "Fielder-Name",
  50. "num_arr": []any{1, 2, 3, 4, 5},
  51. "any_arr": []any{"one", "two", 3, 4},
  52. "child_arr": []json.Map{
  53. {
  54. "id": 11,
  55. "name": "Name-77",
  56. },
  57. },
  58. }
  59. var rObj TFielder
  60. if err := parseStruct(reflect.ValueOf(lMap), reflect.ValueOf(&rObj), "struct"); err != nil {
  61. t.Fatal(err)
  62. }
  63. log.Println(rObj)
  64. }
  65. func TestParse2(t *testing.T) {
  66. //var val []int
  67. //val = 20
  68. val := []any{1, 2, 3, 4, 5}
  69. log.Println(val)
  70. var val2 []*float64
  71. //val2 := []int{1, 2, 3}
  72. if err := parseType(reflect.ValueOf(&val), reflect.ValueOf(&val2), "val"); err != nil {
  73. t.Fatal(err)
  74. }
  75. log.Println("KK", val2, val)
  76. for _, p := range val2 {
  77. t.Log(*p)
  78. }
  79. }
  80. func TestParseMap(t *testing.T) {
  81. //var val map[string]int
  82. //val := map[string]int{"a": 1, "b": 2, "c": 3}
  83. val := struct {
  84. Name string
  85. AgeNum int
  86. }{
  87. Name: "Иван",
  88. AgeNum: 30,
  89. }
  90. var val2 map[string]any
  91. if err := parseType(reflect.ValueOf(&val), reflect.ValueOf(&val2), "val"); err != nil {
  92. t.Fatal(err)
  93. }
  94. log.Println("KK", val2, val)
  95. }
  96. type Person struct {
  97. Name *string
  98. AgeNum int
  99. Child *Person
  100. Childs []*Person
  101. }
  102. func (s *Person) String() string {
  103. return fmt.Sprintf("Person{Name: %v, AgeNum: %d, Child: %v}", *s.Name, s.AgeNum, s.Child)
  104. }
  105. func TestParseStruct(t *testing.T) {
  106. val := json.Map{
  107. "name": "Иван",
  108. "age_num": 30,
  109. "child": json.Map{
  110. "name": "OOO",
  111. "age_num": 10,
  112. },
  113. "childs": []json.Map{
  114. {
  115. "name": "OOO",
  116. "age_num": 10,
  117. },
  118. {
  119. "name": "OOO1",
  120. "age_num": 10,
  121. },
  122. {
  123. "name": "OOO2",
  124. "age_num": 10,
  125. },
  126. },
  127. }
  128. var val2 Person
  129. if err := parseType(reflect.ValueOf(&val), reflect.ValueOf(&val2), "val"); err != nil {
  130. t.Fatal(err)
  131. }
  132. t.Log(val2)
  133. t.Log(*val2.Name)
  134. }