根据任务要求审查这个生成的设置更新器。
只通过 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, changes map[string]any) error {
target := reflect.ValueOf(dst).Elem()
for name, raw := range changes {
field := target.FieldByName(name)
if !field.IsValid() {
continue
}
candidate := reflect.ValueOf(raw)
if candidate.Type().ConvertibleTo(field.Type()) {
field.Set(candidate.Convert(field.Type()))
}
}
return nil
}
生成代码仅作示例,不代表任何特定模型