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  }