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()
}
谢谢,我以为会是这样的。