diff --git a/dynamic_struct.go b/dynamic_struct.go index bd5746e..29d9d65 100644 --- a/dynamic_struct.go +++ b/dynamic_struct.go @@ -23,7 +23,7 @@ func NewMap2DynamicStruct(mapData map[string]any, tagTable map[string]string) *D d := NewDynamic() d.mapData = mapData for k, v := range mapData { - d.AddAny(String(k).SnakeCaseToCamel(), tagTable[k], "", v) + d.AddAny(String(k).SnakeCaseToCamel(), tagTable[k], "dynamic_struct", v) } return d } @@ -63,13 +63,13 @@ func (ds *DynamicStruct) SetMapData(field string, value any) { // Author : go_developer@163.com<白茶清欢> // // Date : 17:50 2024/8/21 -func (ds *DynamicStruct) AddInt(fieldName string, fieldTag string, pkgPath string, value int) { +func (ds *DynamicStruct) AddInt(fieldName string, fieldTag string, pkgPath string, value int64) { ds.AddStructField(reflect.StructField{ Name: fieldName, PkgPath: pkgPath, Type: reflect.TypeOf(int64(0)), - Tag: reflect.StructTag(fmt.Sprintf(`json:"%v"`, fieldTag)), - }) + Tag: reflect.StructTag(fieldTag), + }, value) } // AddUint 添加uint字段, 统一 uint64 @@ -77,13 +77,13 @@ func (ds *DynamicStruct) AddInt(fieldName string, fieldTag string, pkgPath strin // Author : go_developer@163.com<白茶清欢> // // Date : 17:50 2024/8/21 -func (ds *DynamicStruct) AddUint(fieldName string, fieldTag string, pkgPath string) { +func (ds *DynamicStruct) AddUint(fieldName string, fieldTag string, pkgPath string, val uint64) { ds.AddStructField(reflect.StructField{ Name: fieldName, PkgPath: pkgPath, Type: reflect.TypeOf(uint64(0)), Tag: reflect.StructTag(fieldTag), - }) + }, val) } // AddString 添加字符串字段 @@ -91,13 +91,13 @@ func (ds *DynamicStruct) AddUint(fieldName string, fieldTag string, pkgPath stri // Author : go_developer@163.com<白茶清欢> // // Date : 17:49 2024/8/21 -func (ds *DynamicStruct) AddString(fieldName string, fieldTag string, pkgPath string) { +func (ds *DynamicStruct) AddString(fieldName string, fieldTag string, pkgPath string, val string) { ds.AddStructField(reflect.StructField{ Name: fieldName, PkgPath: pkgPath, Type: reflect.TypeOf(""), - Tag: reflect.StructTag(fmt.Sprintf(`json:"%v"`, fieldTag)), - }) + Tag: reflect.StructTag(fieldTag), + }, val) } // AddBool 添加bool字段 @@ -105,13 +105,13 @@ func (ds *DynamicStruct) AddString(fieldName string, fieldTag string, pkgPath st // Author : go_developer@163.com<白茶清欢> // // Date : 17:49 2024/8/21 -func (ds *DynamicStruct) AddBool(fieldName string, fieldTag string, pkgPath string) { +func (ds *DynamicStruct) AddBool(fieldName string, fieldTag string, pkgPath string, val bool) { ds.AddStructField(reflect.StructField{ Name: fieldName, PkgPath: pkgPath, Type: reflect.TypeOf(true), Tag: reflect.StructTag(fmt.Sprintf(`json:"%v"`, fieldTag)), - }) + }, val) } // AddFloat 添加float字段, 统一 float64 @@ -119,13 +119,13 @@ func (ds *DynamicStruct) AddBool(fieldName string, fieldTag string, pkgPath stri // Author : go_developer@163.com<白茶清欢> // // Date : 17:48 2024/8/21 -func (ds *DynamicStruct) AddFloat(fieldName string, fieldTag string, pkgPath string) { +func (ds *DynamicStruct) AddFloat(fieldName string, fieldTag string, pkgPath string, val float64) { ds.AddStructField(reflect.StructField{ Name: fieldName, PkgPath: pkgPath, Type: reflect.TypeOf(float64(0)), - Tag: reflect.StructTag(fmt.Sprintf(`json:"%v"`, fieldTag)), - }) + Tag: reflect.StructTag(fieldTag), + }, val) } // AddSlice 添加slice @@ -133,13 +133,13 @@ func (ds *DynamicStruct) AddFloat(fieldName string, fieldTag string, pkgPath str // Author : go_developer@163.com<白茶清欢> // // Date : 17:47 2024/8/21 -func (ds *DynamicStruct) AddSlice(fieldName string, fieldTag string, pkgPath string) { +func (ds *DynamicStruct) AddSlice(fieldName string, fieldTag string, pkgPath string, val any) { ds.AddStructField(reflect.StructField{ Name: fieldName, PkgPath: pkgPath, Type: reflect.TypeOf([]any{}), Tag: reflect.StructTag(fieldTag), - }) + }, val) } // AddMap 添加map字段 @@ -147,13 +147,13 @@ func (ds *DynamicStruct) AddSlice(fieldName string, fieldTag string, pkgPath str // Author : go_developer@163.com<白茶清欢> // // Date : 17:43 2024/8/21 -func (ds *DynamicStruct) AddMap(fieldName string, fieldTag string, pkgPath string) { +func (ds *DynamicStruct) AddMap(fieldName string, fieldTag string, pkgPath string, val any) { ds.AddStructField(reflect.StructField{ Name: fieldName, PkgPath: pkgPath, Type: reflect.TypeOf(map[string]any{}), Tag: reflect.StructTag(fieldTag), - }) + }, val) } // AddAny 添加任意类型字段 @@ -171,7 +171,7 @@ func (ds *DynamicStruct) AddAny(fieldName string, fieldTag string, pkgPath strin PkgPath: pkgPath, Type: reflect.TypeOf(value), Tag: reflect.StructTag(fieldTag), - }) + }, value) } // AddStructField 添加结构体字段 @@ -179,12 +179,13 @@ func (ds *DynamicStruct) AddAny(fieldName string, fieldTag string, pkgPath strin // Author : go_developer@163.com<白茶清欢> // // Date : 17:42 2024/8/21 -func (ds *DynamicStruct) AddStructField(field reflect.StructField) { +func (ds *DynamicStruct) AddStructField(field reflect.StructField, fieldValue any) { if field.Tag == "" { field.Tag = reflect.StructTag(fmt.Sprintf(`json:"%v"`, field.Name)) } field.Name = String(field.Name).SnakeCaseToCamel() // 转成大驼峰, 保证对外可访问 ds.structFieldList = append(ds.structFieldList, field) + ds.SetMapData(field.Name, fieldValue) } // GetStructType 获取结构体的类型 diff --git a/dynamic_struct_test.go b/dynamic_struct_test.go index af3cfec..2b3193a 100644 --- a/dynamic_struct_test.go +++ b/dynamic_struct_test.go @@ -15,8 +15,8 @@ import ( func TestNewDynamic(t *testing.T) { instance := NewDynamic() - instance.AddInt("Age", "age", "") - instance.AddString("Name", "name", "") + instance.AddInt("Age", "age", "", 0) + instance.AddString("Name", "name", "", "test") defaultVal := instance.ToStructDefaultValue() testMap := map[string]any{ "name": "白茶",