feature/upgrade_dynamic_struct #9
| @ -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 | ||||
| } | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user