如何判断`value.FieldByName(name)`是否找到该字段?

时间:2014-08-07 22:23:43

标签: go

在下面的示例中找不到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() {
}

1 个答案:

答案 0 :(得分:4)

正如您已经提到的那样,<{1}}包的 the documentation 声明:

  

FieldByName返回具有给定名称的struct字段。如果没有找到字段,则返回零值

这与类型的零值不同。在 the documentation for Value 下,我们可以阅读:

  

零值表示无值。它的IsValid方法返回false,它的Kind方法返回Invalid,它的String方法返回&#34;&#34;,并且所有其他方法都会发生混乱。大多数函数和方法永远不会返回无效值。如果有,它的文档明确说明了条件。

因此,虽然reflect解决方案可能有效,但更具描述性的测试方法是:

Len