我试图找出如何停止执行我的程序时,field
没有找到在下面的例子。
如果FieldByName(key)
返回零值,我如何警告用户该字段未找到?
field := mutable.FieldByName(key)
// need to figure out if the field exists before calling .Type() on it
if field.X == Y {
log.Fatalf("Unable to find [%s] in Config object", key)
}
switch field.Type().Name() {
}
正如您已经提到的, reflect
包的文档声明:
FieldByName返回给定名称的结构字段。如果没有找到字段,则返回0值
这与类型的零值不同。在下Value
的文档,我们可以读到:
因此,虽然0值表示无值。它的IsValid方法返回false,它的Kind方法返回Invalid,它的String方法返回",所有其他方法都panic。大多数函数和方法从不返回无效值。如果有,它的文档会明确地说明条件。
Len
解决方案可能有效,但更描述性的测试方法是:
if !field.IsValid() {
log.Fatalf("Unable to find [%s] in Config object", key)
}