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