From ca03e37c1862c69e9499bfbb6033b0f436f299d2 Mon Sep 17 00:00:00 2001 From: zhoujie Date: Wed, 5 Feb 2025 13:26:41 +0800 Subject: [PATCH] =?UTF-8?q?fix(scan):=20=E4=BF=AE=E5=A4=8D=E5=AF=B9struct?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E9=87=8D=E5=A4=8D=E5=B1=9E=E6=80=A7=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E7=9A=84=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增了在递归scan对象属性的时候发现嵌套属性名称和当前属性名称一致的时候做了友好错误提示 --- mapping.go | 2 +- mapping_test.go | 2 +- scan.go | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/mapping.go b/mapping.go index 6d2d32b..0ec0796 100644 --- a/mapping.go +++ b/mapping.go @@ -65,7 +65,7 @@ func (b *Mapper) extractStructData(data ...any) (map[string][]*TableRowMateria, } if tableName == "" { - return nil, fmt.Errorf("not import TableName() string func for struct type: %s", uniqueTypeName) + return nil, fmt.Errorf("not func TableName() string func for struct type: %s", uniqueTypeName) } } diff --git a/mapping_test.go b/mapping_test.go index 4e75f70..1ecefde 100644 --- a/mapping_test.go +++ b/mapping_test.go @@ -58,7 +58,7 @@ func TestBuilderInsert(t *testing.T) { Ts: time.Now(), LoadUnitId: "负载单体ID", PInt: &p, NullInt32: sql.NullInt32{Int32: 32, Valid: true}, }, &TaosUser{ - TaosTAG: &TaosTAG{DevId: "User001", DevType: "User类型", DataType: "User数据类型001"}, + TaosTAG: &TaosTAG{DevId: "User001", DevType: "User类型", DataType: "User数据类型001", Alias: "三儿"}, Ts: time.Now(), Name: "张三", }, &TaosUser{ TaosTAG: &TaosTAG{DevId: "User002", DevType: "User类型", DataType: "User数据类型002"}, diff --git a/scan.go b/scan.go index eb93511..d394d3d 100644 --- a/scan.go +++ b/scan.go @@ -81,7 +81,11 @@ func scan(data interface{}) (*StructMate, error) { continue } - sr.Field2IndexCache[field.Name] = append(sr.Field2IndexCache[field.Name], i) + if len(sr.Field2IndexCache[field.Name]) > 0 { + return nil, fmt.Errorf("duplicate field [%s %s `db:%s`]", field.Name, field.Type.Name(), columnName) + } + + sr.Field2IndexCache[field.Name] = append([]int{}, i) sr.DBName2IndexCache[columnName] = append(sr.DBName2IndexCache[columnName], i) sr.Filed2DBNameCache[field.Name] = columnName