Skip to content

Commit 2568895

Browse files
committed
更新 go-conv 库。解决了使用嵌套的 struct 作为参数时,当嵌套结构内的指针类型字段值为 nil 时,该字段不会被识别的问题。
1 parent 3ba8e81 commit 2568895

3 files changed

Lines changed: 48 additions & 16 deletions

File tree

abstract_db_client_test.go

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/bunnier/sqlmer
33
go 1.24.0
44

55
require (
6-
github.com/cmstar/go-conv v0.6.3
6+
github.com/cmstar/go-conv v0.6.6
77
github.com/denisenkom/go-mssqldb v0.12.3
88
github.com/go-sql-driver/mysql v1.9.3
99
github.com/ncruces/go-sqlite3 v0.30.4

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4
33
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw=
44
github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0=
55
github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8=
6-
github.com/cmstar/go-conv v0.6.3 h1:MlfQ+xzpCZ6VAE2QiDuwIhpgHi3PlqGbDWHi87/CDtU=
7-
github.com/cmstar/go-conv v0.6.3/go.mod h1:vc836gwYz4cI2oCWdL/EF514eEjTDpXmTBvfZEELdXs=
6+
github.com/cmstar/go-conv v0.6.6 h1:Be0qX3niJ+fJ/h56sm2haDN674+xzC6zkrO+qZK0hdY=
7+
github.com/cmstar/go-conv v0.6.6/go.mod h1:vc836gwYz4cI2oCWdL/EF514eEjTDpXmTBvfZEELdXs=
88
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
99
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1010
github.com/denisenkom/go-mssqldb v0.12.3 h1:pBSGx9Tq67pBOTLmxNuirNTeB8Vjmf886Kx+8Y+8shw=

0 commit comments

Comments
 (0)