@@ -15,13 +15,26 @@ func Test_preHandleArgs(t *testing.T) {
1515 Ap * string
1616 }
1717
18+ type TypeAptr2 struct {
19+ TypeAptr
20+ }
21+
22+ type TypeAptr3 struct {
23+ TypeAptr2
24+ }
25+
1826 type TypeB struct {
1927 B string
2028 }
2129
30+ type TypeIgnore struct {
31+ Ignore string
32+ }
33+
2234 type TypeAB struct {
2335 TypeA
2436 TypeB
37+ * TypeIgnore // 不赋值此字段,它在作为参数时会被忽略掉。
2538 }
2639
2740 type TypeABC struct {
@@ -98,23 +111,28 @@ func Test_preHandleArgs(t *testing.T) {
98111
99112 t .Run ("single_ptr_struct" , func (t * testing.T ) {
100113 pStr := "a"
101- got , err := preHandleArgs (TypeAptr {Ap : & pStr })
114+ got , err := preHandleArgs (TypeAptr3 { TypeAptr2 : TypeAptr2 { TypeAptr : TypeAptr {Ap : & pStr }} })
102115 if err != nil {
103116 t .Errorf ("mergeArgs() error = %v, wantErr false" , err )
104117 return
105118 }
106119 if ! reflect .DeepEqual (got , []any {map [string ]any {"Ap" : pStr }}) {
107- t .Errorf ("mergeArgs() = %v, want %v" , got , []any {map [string ]any {"A " : "a" }})
120+ t .Errorf ("mergeArgs() = %v, want %v" , got , []any {map [string ]any {"Ap " : "a" }})
108121 }
109122
110- got , err = preHandleArgs (TypeAptr {Ap : nil })
111- if err != nil {
112- t .Errorf ("mergeArgs() error = %v, wantErr false" , err )
113- return
114- }
115- if ! reflect .DeepEqual (got , []any {map [string ]any {"Ap" : nil }}) {
116- t .Errorf ("mergeArgs() = %v, want %v" , got , []any {map [string ]any {"A" : "a" }})
117- }
123+ checkEmbeddedField := func (v any ) {
124+ got , err = preHandleArgs (v )
125+ if err != nil {
126+ t .Errorf ("mergeArgs() error = %v, wantErr false" , err )
127+ return
128+ }
129+ if ! reflect .DeepEqual (got , []any {map [string ]any {"Ap" : nil }}) {
130+ t .Errorf ("mergeArgs() = %v, want %v" , got , []any {map [string ]any {"Ap" : nil }})
131+ }
132+ }
133+ checkEmbeddedField (TypeAptr {})
134+ checkEmbeddedField (TypeAptr2 {})
135+ checkEmbeddedField (TypeAptr3 {})
118136 })
119137
120138 t .Run ("single_struct_pointer" , func (t * testing.T ) {
@@ -219,12 +237,26 @@ func Test_preHandleArgs(t *testing.T) {
219237 })
220238
221239 t .Run ("mixed_types" , func (t * testing.T ) {
240+ ab := TypeAB {}
241+ ab .A = "ab_a"
242+ ab .B = "ab_b"
243+
244+ abc := TypeABC {}
245+ abc .A = "abc_a"
246+ abc .B = "abc_b" // override ab.A
247+ abc .C = "abc_c"
248+
249+ m := map [string ]any {
250+ "C" : "map_c" , // override abc.C
251+ "D" : "map_d" ,
252+ }
253+
222254 args := []any {
223- TypeAB { TypeA : TypeA { A : "ab_a" }, TypeB : TypeB { B : "ab_b" }} ,
255+ ab ,
224256 1 ,
225- TypeABC { TypeAB : TypeAB { TypeA : TypeA { A : "abc_a" }, TypeB : TypeB { B : "abc_b" }}, C : "abc_c" } ,
257+ abc ,
226258 []byte {1 , 2 },
227- map [ string ] any { "C" : "map_c" , "D" : "map_d" } ,
259+ m ,
228260 []int {1 , 2 , 3 },
229261 testTime ,
230262 }
0 commit comments