Pointers 确认Go中的结构字段非零

Pointers 确认Go中的结构字段非零,pointers,go,reflection,interface,Pointers,Go,Reflection,Interface,我正在尝试编写一个通用函数,它接受一个结构并确认给定的字段具有非零值 这是我的职责: func CheckRequiredFields(kind string, i interface{}, fields ...string) error { for _, field := range fields { value := reflect.ValueOf(i).FieldByName(field) if value.Interface() == reflec

我正在尝试编写一个通用函数,它接受一个结构并确认给定的字段具有非零值

这是我的职责:

func CheckRequiredFields(kind string, i interface{}, fields ...string) error {
    for _, field := range fields {
        value := reflect.ValueOf(i).FieldByName(field)
        if value.Interface() == reflect.Zero(value.Type()).Interface() {
            return fmt.Errorf("missing required %s field %s", kind, field)
        }
    }
    return nil
}
如果一个结构以i的形式传入,它工作得很好,但是如果i是指向结构的指针,它就会失败

如果传入的值是指针,如何反映接口的值?

可以使用,它返回v指向的值。如果v是nil指针,则间接返回零值。如果v不是指针,则间接返回v

如果要检查该值是否为指针,请检查其种类,并使用Elem取消对指针的引用

v := reflect.ValueOf(i)
if v.Kind() == reflect.Ptr {
    v = v.Elem()
}

谢谢,我以为会是这样的。