优化动态结构体生成

This commit is contained in:
白茶清欢 2025-02-07 12:20:52 +08:00
parent 981ff94388
commit 743acb53f2
2 changed files with 23 additions and 22 deletions

View File

@ -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 获取结构体的类型

View File

@ -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": "白茶",