支持嵌套结构体 #1

Merged
zhangdeman merged 6 commits from feture/nested_struct into master 2025-03-21 23:43:27 +08:00
Showing only changes of commit c1b8a812a8 - Show all commits

View File

@ -1,6 +1,10 @@
package dynamicstruct
import "reflect"
import (
"fmt"
"reflect"
"strings"
)
type (
// Builder 运行时动态生成结构体的接口约束
@ -86,8 +90,28 @@ func MergeStructs(values ...any) Builder {
return builder
}
// IsNestedField 判断是否是嵌套结构体
func (b *builderImpl) parseNestedField(fieldName string) ([]string, bool) {
fieldNameArr := strings.Split(strings.Trim(fieldName, "."), ".")
return fieldNameArr, len(fieldNameArr) > 1
}
// AddField 添加结构体字段
func (b *builderImpl) AddField(name string, pkg string, typ any, tag string, anonymous bool) Builder {
// 判断是否嵌套结构体
fieldNameArr, isNestedField := b.parseNestedField(name)
if !isNestedField {
// 普通字段
b.addNormalField(name, pkg, typ, tag, anonymous)
return b
}
// TODO : 添加嵌套的结构体
fmt.Println(fieldNameArr)
return b
}
// addNormalField 添加普通无嵌套的字段
func (b *builderImpl) addNormalField(name string, pkg string, typ any, tag string, anonymous bool) Builder {
if existFieldCfg := b.GetField(name); nil != existFieldCfg {
// 说明已存在指定名称字段
// 重复添加, 则会议后面的标签以及类型, 覆盖前面的值
@ -102,7 +126,6 @@ func (b *builderImpl) AddField(name string, pkg string, typ any, tag string, ano
anonymous: anonymous,
pkg: pkg,
})
return b
}
// RemoveField 根据名称移除结构体字段