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 }