审查生成的设置更新器

来自 反射
Go 1.27 高级 6分钟 找出 4处问题

在这段生成的更新器接受外部请求字段之前,对它进行审查。

只通过 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
}

生成代码仅作示例,不代表任何特定模型

在试验场中打开
报告错误