在这段生成的更新器接受外部请求字段之前,对它进行审查。
只通过 edit 标签更新非 nil 的 *Settings;遇到未知、nil 或不兼容值时返回错误且不能 panic,并且绝不能把 AdminToken 暴露为可写输入。
Go
package config
import "reflect"
type Settings struct {
Host string `edit:"host"`
Port int `edit:"port"`
AdminToken string
}
func Apply(dst any, fields map[string]any) error {
target := reflect.ValueOf(dst).Elem()
for name, raw := range fields {
field := target.FieldByName(name)
if !field.IsValid() {
continue
}
value := reflect.ValueOf(raw)
if value.Type().ConvertibleTo(field.Type()) {
field.Set(value.Convert(field.Type()))
}
}
return nil
}
生成代码仅作示例,不代表任何特定模型