动态结构体支持赋值
This commit is contained in:
parent
c757e551a8
commit
c503187022
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user