在下面的示例中找不到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() {
}
答案 0 :(得分:4)
正如您已经提到的那样,<{1}}包的 the documentation 声明:
FieldByName返回具有给定名称的struct字段。如果没有找到字段,则返回零值
这与类型的零值不同。在 the documentation for Value
下,我们可以阅读:
零值表示无值。它的IsValid方法返回false,它的Kind方法返回Invalid,它的String方法返回&#34;&#34;,并且所有其他方法都会发生混乱。大多数函数和方法永远不会返回无效值。如果有,它的文档明确说明了条件。
因此,虽然reflect
解决方案可能有效,但更具描述性的测试方法是:
Len