允许map传入不存在的字段

This commit is contained in:
Yun
2025-10-31 23:28:14 +08:00
parent 77a8322aad
commit 3fb090a620
3 changed files with 87 additions and 4 deletions
+15 -3
View File
@@ -19,13 +19,21 @@ func AttactToStruct(structxx any, updateMap map[string]string) (map[string]Chang
// StructProcessor 结构体处理器
type StructProcessor struct {
options *Options
fieldMapper FieldMapper
valueSetter ValueSetter
}
// NewStructProcessor 创建新的结构体处理器
func NewStructProcessor() *StructProcessor {
func NewStructProcessor(ops ...Option) *StructProcessor {
options := defaultOptions()
for _, op := range ops {
op(options)
}
return &StructProcessor{
options: options,
fieldMapper: &defaultFieldMapper{},
valueSetter: &defaultValueSetter{},
}
@@ -55,13 +63,17 @@ func (sp *StructProcessor) AttactToStruct(structxx any, updateMap map[string]str
v = v.Elem()
t := v.Type()
fieldMap := sp.fieldMapper.GetFieldMap(t)
for mapKey, mapValue := range updateMap {
fieldInfo, exists := fieldMap[mapKey]
if !exists {
return nil, fmt.Errorf("字段 %s 不存在", mapKey)
if sp.options.allowUnknownFields {
continue
} else {
return nil, fmt.Errorf("字段 %s 不存在", mapKey)
}
}
field, err := sp.getFieldByPath(v, fieldInfo.Index)