如何确定' value.FieldByName(name) '是否找到了字段



我试图找出如何停止执行我的程序时,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)
}

相关内容

最新更新