动态生成结构体的基础能力
This commit is contained in:
parent
da44ae07ab
commit
e4cef0855e
98
dynamic_struct.go
Normal file
98
dynamic_struct.go
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
// Package wrapper ...
|
||||||
|
//
|
||||||
|
// Description : wrapper ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2024-08-21 16:43
|
||||||
|
package wrapper
|
||||||
|
|
||||||
|
import "reflect"
|
||||||
|
|
||||||
|
func NewDynamic() *DynamicStruct {
|
||||||
|
return &DynamicStruct{
|
||||||
|
structFieldList: make([]reflect.StructField, 0),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DynamicStruct 动态生成数据结构
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 16:48 2024/8/21
|
||||||
|
type DynamicStruct struct {
|
||||||
|
structFieldList []reflect.StructField // 结构体字段列表
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ds *DynamicStruct) AddInt() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ds *DynamicStruct) AddUint() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ds *DynamicStruct) AddString() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ds *DynamicStruct) AddBool() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ds *DynamicStruct) AddFloat() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ds *DynamicStruct) AddSlice() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ds *DynamicStruct) AddMap() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ds *DynamicStruct) AddStructField() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetStructType 获取结构体的类型
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 16:58 2024/8/21
|
||||||
|
func (ds *DynamicStruct) GetStructType() reflect.Type {
|
||||||
|
return reflect.StructOf(ds.structFieldList)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToStructDefaultValue 获取结构体的值, 并采用对应类型默认值填充相关字段
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 16:56 2024/8/21
|
||||||
|
func (ds *DynamicStruct) ToStructDefaultValue() any {
|
||||||
|
defer ds.Clear()
|
||||||
|
defaultValue := reflect.New(ds.GetStructType()).Elem().Interface()
|
||||||
|
return defaultValue
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToStructDefaultSliceValue 自动生成结构体列表
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 17:04 2024/8/21
|
||||||
|
func (ds *DynamicStruct) ToStructDefaultSliceValue() any {
|
||||||
|
defer ds.Clear()
|
||||||
|
tSlice := reflect.MakeSlice(reflect.SliceOf(ds.GetStructType()), 0, 0)
|
||||||
|
return reflect.New(tSlice.Type()).Elem().Interface()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear 清理
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 17:08 2024/8/21
|
||||||
|
func (ds *DynamicStruct) Clear() {
|
||||||
|
// 清理掉已设置的字段, 不然实例复用会互相影响
|
||||||
|
ds.structFieldList = make([]reflect.StructField, 0)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user