允许map传入不存在的字段
This commit is contained in:
+15
-3
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user