我有一段反射代码尝试按名称获取结构上的字段,然后检查该字段是否存在:
type test struct {
A bool
B bool
}
t := new(test)
metaValue := reflect.ValueOf(t).Elem()
field := metaValue.FieldByName(name)
if field.IsZero() {
glog.Errorf("Field %s was not on the struct", inner)
}
根据 上的文档FieldByName,如果未找到任何字段,此函数应返回零值。但是,下一行会出现以下错误:
panic: reflect: call of reflect.Value.IsZero on zero Value
goroutine 268 [running]:
reflect.Value.IsZero({0x0, 0x0, 0x112a974})
reflect/value.go:1475 +0x27f
根据这个 GitHub 问题,只有当值包含 nil (即没有类型)时才会发生这种情况,并且IsValid应该使用它。为什么会这样?
神不在的星期二
相关分类