优化动态结构体生成
This commit is contained in:
parent
981ff94388
commit
743acb53f2
@ -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 获取结构体的类型
|
||||
|
@ -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": "白茶",
|
||||
|
Loading…
x
Reference in New Issue
Block a user