From 659fc10baee1ba49d49329e068d7652687f39319 Mon Sep 17 00:00:00 2001 From: what Date: Fri, 28 Aug 2026 17:02:56 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=20Example=20=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E5=91=BD=E5=90=8D=E4=B8=8E=E8=BE=93=E5=87=BA=E6=B3=A8?= =?UTF-8?q?=E9=87=8A=E4=BD=8D=E7=BD=AE,=E8=AE=A9=20go=20vet=20/=20go=20tes?= =?UTF-8?q?t=20=E6=81=A2=E5=A4=8D=E5=8F=AF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit go vet ./... 此前有 13 处失败, 导致 go test ./...(默认带 vet)根本跑不起来, 必须加 -vet=off。这是既存问题, 与实现改动无关。 命名问题(12 处): Example 函数名的前缀必须是包内真实存在的标识符。 ExampleStructMap_* -> ExampleR_* (包里没有 StructMap) ExampleSet_* -> ExampleR_Set_* (Set 是 R 的方法, 不是包级函数) ExampleAppend_* -> ExampleR_Append_* (同上) ExampleSchema_Unmarshal -> ExampleSchema_unmarshalJSON (Schema 没有 Unmarshal 方法, 这个例子演示的是 json.Unmarshal) 输出注释位置(1 处): ExampleR_Append_typeConversionError 的 // Output: 后面 还跟着一条注释, 违反"Output 必须是最后一个注释块"。因为格式不合法, Go 一直 没把它当输出例子比对 —— 里面写的期望输出其实是错的(与实际信息不符)也没被发现。 把注释挪到 defer 之前, 并把期望输出更正为真实的 panic 信息。 已验证: 故意改错期望输出现在会导致测试失败, 说明确实在比对了。 现在 go vet ./... 干净, go test ./... 无需 -vet=off 即可运行。 --- errors_example_test.go | 32 ++++++++++++++++---------------- fieldx/example_test.go | 4 ++-- rfx_example_test.go | 20 ++++++++++---------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/errors_example_test.go b/errors_example_test.go index 328cd9d..9b1dd7b 100644 --- a/errors_example_test.go +++ b/errors_example_test.go @@ -6,8 +6,8 @@ import ( "git.fsdpf.net/go/reflux" ) -// ExampleSet_errorMessages 演示设置失败时的详细错误信息 -func ExampleSet_errorMessages() { +// ExampleR_Set_errorMessages 演示设置失败时的详细错误信息 +func ExampleR_Set_errorMessages() { type Person struct { Name string Age int @@ -28,8 +28,8 @@ func ExampleSet_errorMessages() { r.Set("Age", map[string]int{"invalid": 123}) } -// ExampleSet_fieldNotFound 演示字段不存在的错误信息 -func ExampleSet_fieldNotFound() { +// ExampleR_Set_fieldNotFound 演示字段不存在的错误信息 +func ExampleR_Set_fieldNotFound() { type Person struct { Name string Age int @@ -48,8 +48,8 @@ func ExampleSet_fieldNotFound() { r.Set("InvalidField", "value") } -// ExampleSet_sliceIndexOutOfRange 演示切片索引越界的错误信息 -func ExampleSet_sliceIndexOutOfRange() { +// ExampleR_Set_sliceIndexOutOfRange 演示切片索引越界的错误信息 +func ExampleR_Set_sliceIndexOutOfRange() { type Data struct { Items []int } @@ -67,8 +67,8 @@ func ExampleSet_sliceIndexOutOfRange() { r.Set("Items.10", 999) } -// ExampleSet_unexportedField 演示未导出字段的错误信息 -func ExampleSet_unexportedField() { +// ExampleR_Set_unexportedField 演示未导出字段的错误信息 +func ExampleR_Set_unexportedField() { type Person struct { Name string age int // 未导出字段 @@ -87,8 +87,8 @@ func ExampleSet_unexportedField() { r.Set("age", 40) } -// ExampleAppend_typeConversionError 演示 Append 时的类型转换错误 -func ExampleAppend_typeConversionError() { +// ExampleR_Append_typeConversionError 演示 Append 时的类型转换错误 +func ExampleR_Append_typeConversionError() { type Data struct { Items []int } @@ -96,19 +96,19 @@ func ExampleAppend_typeConversionError() { d := &Data{Items: []int{1, 2, 3}} r := reflux.New(d).Get("Items") + // 尝试追加无法转换为 int 的 map defer func() { if rec := recover(); rec != nil { fmt.Println(rec) - // Output: rfx: failed to append item at index 0 to slice: cannot convert value of type map[string]int to target type int: ... + // Output: rfx: failed to append item at index 0 to slice: rfx: cannot convert, value of type map[string]int to target type int: unable to cast map[string]int{"invalid":123} of type map[string]int to int } }() - // 尝试追加无法转换为 int 的 map r.Append(map[string]int{"invalid": 123}) } -// ExampleSet_nestedPathError 演示嵌套路径中的错误信息 -func ExampleSet_nestedPathError() { +// ExampleR_Set_nestedPathError 演示嵌套路径中的错误信息 +func ExampleR_Set_nestedPathError() { type Address struct { City string } @@ -133,8 +133,8 @@ func ExampleSet_nestedPathError() { r.Set("Address.Country", "USA") } -// ExampleSet_successfulTypeConversion 演示成功的类型转换 -func ExampleSet_successfulTypeConversion() { +// ExampleR_Set_successfulTypeConversion 演示成功的类型转换 +func ExampleR_Set_successfulTypeConversion() { type Person struct { Name string Age int diff --git a/fieldx/example_test.go b/fieldx/example_test.go index 0f75241..af474c3 100644 --- a/fieldx/example_test.go +++ b/fieldx/example_test.go @@ -166,8 +166,8 @@ func ExampleSchema_Generate_complexNested() { // user.contact.phone: N/A } -// ExampleSchema_Unmarshal 演示直接使用 json.Unmarshal 创建 Schema -func ExampleSchema_Unmarshal() { +// ExampleSchema_unmarshalJSON 演示直接使用 json.Unmarshal 创建 Schema +func ExampleSchema_unmarshalJSON() { // JSON Schema 字符串 jsonStr := `{ "name": { diff --git a/rfx_example_test.go b/rfx_example_test.go index 7d75117..08f0049 100644 --- a/rfx_example_test.go +++ b/rfx_example_test.go @@ -342,8 +342,8 @@ func ExampleNew_withMap() { // New timeout: 30 } -// ExampleStructMap_Scope_noArgs 演示如何使用 Scope() 不传参数来复制整个对象 -func ExampleStructMap_Scope_noArgs() { +// ExampleR_Scope_noArgs 演示如何使用 Scope() 不传参数来复制整个对象 +func ExampleR_Scope_noArgs() { type Config struct { Host string Port int @@ -376,8 +376,8 @@ func ExampleStructMap_Scope_noArgs() { // Clone - Host: 127.0.0.1, Port: 9090 } -// ExampleStructMap_Scope_withPath 演示如何使用 Scope() 传入路径来复制嵌套对象 -func ExampleStructMap_Scope_withPath() { +// ExampleR_Scope_withPath 演示如何使用 Scope() 传入路径来复制嵌套对象 +func ExampleR_Scope_withPath() { type Address struct { City string Street string @@ -449,8 +449,8 @@ func ExampleNew_withNestedMap() { // User (dot notation): Alice } -// ExampleStructMap_lowercaseFields 演示如何使用小写字段名访问 struct -func ExampleStructMap_lowercaseFields() { +// ExampleR_lowercaseFields 演示如何使用小写字段名访问 struct +func ExampleR_lowercaseFields() { type Person struct { Name string Age int @@ -480,8 +480,8 @@ func ExampleStructMap_lowercaseFields() { // Updated - Name: Bob, Age: 35 } -// ExampleStructMap_lowercaseNestedFields 演示如何使用小写字段名访问嵌套 struct -func ExampleStructMap_lowercaseNestedFields() { +// ExampleR_lowercaseNestedFields 演示如何使用小写字段名访问嵌套 struct +func ExampleR_lowercaseNestedFields() { type Address struct { City string Street string @@ -520,8 +520,8 @@ func ExampleStructMap_lowercaseNestedFields() { // Updated City: Shanghai, Street: New Street } -// ExampleStructMap_castConversion 演示使用 cast 进行智能类型转换 -func ExampleStructMap_castConversion() { +// ExampleR_castConversion 演示使用 cast 进行智能类型转换 +func ExampleR_castConversion() { type Config struct { Port int Host string