From c50318702237805ac4c068eaed13f0396d5f3e90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Fri, 24 Jan 2025 18:06:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A8=E6=80=81=E7=BB=93=E6=9E=84=E4=BD=93?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=B5=8B=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dynamic_struct.go | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/dynamic_struct.go b/dynamic_struct.go index 8e89604..428f00d 100644 --- a/dynamic_struct.go +++ b/dynamic_struct.go @@ -12,6 +12,15 @@ import ( "reflect" ) +func NewMap2DynamicStruct(mapData map[string]any, tagTable map[string]string) *DynamicStruct { + d := NewDynamic() + d.mapData = mapData + for k, v := range mapData { + d.AddAny(String(k).SnakeCaseToCamel(), tagTable[k], "", v) + } + return d +} + func NewDynamic() *DynamicStruct { return &DynamicStruct{ structFieldList: make([]reflect.StructField, 0), @@ -25,6 +34,7 @@ func NewDynamic() *DynamicStruct { // Date : 16:48 2024/8/21 type DynamicStruct struct { structFieldList []reflect.StructField // 结构体字段列表 + mapData map[string]any } // AddInt 添加int字段统一Int64 @@ -172,7 +182,18 @@ func (ds *DynamicStruct) GetStructType() reflect.Type { // Date : 16:56 2024/8/21 func (ds *DynamicStruct) ToStructDefaultValue() any { defer ds.Clear() - defaultValue := reflect.New(ds.GetStructType()).Elem().Interface() + reflectValue := reflect.New(ds.GetStructType()).Elem() + if len(ds.mapData) > 0 { + // 开始赋值 + for field, val := range ds.mapData { + realField := String(field).SnakeCaseToCamel() + findFieldValue := reflectValue.FieldByName(realField) + if findFieldValue.CanSet() { + findFieldValue.Set(reflect.ValueOf(val)) + } + } + } + defaultValue := reflectValue.Interface() return defaultValue }