github.com/openimsdk/tools@v0.0.49/mw/replace_nil_test.go (about) 1 package mw 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "testing" 7 ) 8 9 type A struct { 10 B *B 11 BB B 12 BS []*B 13 C []int 14 D map[string]string 15 E interface{} 16 F *int 17 } 18 19 type B struct { 20 D *C 21 E []int 22 } 23 24 type C struct { 25 } 26 27 type D struct { 28 sb string 29 nt []C 30 ssb *A 31 } 32 33 func TestReplaceNil(t *testing.T) { 34 a := &A{} 35 k := any(a) 36 ReplaceNil(&k) 37 //printJson(k) 38 //printJson(repl(k)) 39 // {"B":null,"BB":{"D":null,"E":[]},"C":[],"D":{},"E":null,"F":null} 40 41 var b *A 42 k = any(b) 43 ReplaceNil(&k) 44 //printJson(repl(k)) 45 // {} 46 47 i := 5 48 c := &A{ 49 B: nil, 50 BB: B{ 51 D: &C{}, 52 E: []int{1, 2, 5, 3, 6}, 53 }, 54 C: []int{1, 1, 1}, 55 D: map[string]string{ 56 "a": "A", 57 "b": "B", 58 }, 59 E: map[int]int{ 60 1: 11, 61 2: 22, 62 }, 63 F: &i, 64 } 65 k = any(c) 66 ReplaceNil(&k) 67 printJson(k) 68 // {"B":null,"BB":{"D":{},"E":[1,2,5,3,6]},"C":[1,1,1],"D":{"a":"A","b":"B"},"E":{"1":11,"2":22},"F":5} 69 70 dd := &D{ 71 sb: "fhldsa", 72 nt: []C{}, 73 ssb: &A{}, 74 } 75 k = any(dd) 76 ReplaceNil(&k) 77 printJson(k) 78 // {} 79 } 80 81 func printJson(data any) { 82 jsonData, err := json.Marshal(data) 83 if err != nil { 84 fmt.Println("Error serializing to JSON:", err) 85 return 86 } 87 fmt.Println(string(jsonData)) 88 }