Go 如何确定`value.FieldByName(name)`是否找到该字段?
我试图找出在下面的示例中找不到Go 如何确定`value.FieldByName(name)`是否找到该字段?,go,Go,我试图找出在下面的示例中找不到字段时如何停止程序的执行 如果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) }
字段时如何停止程序的执行
如果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返回具有给定名称的结构字段。如果未找到字段,则返回零值
这与类型的零值不同。在下,我们可以阅读:
零值表示没有值。它的IsValid方法返回false,它的Kind方法返回Invalid,它的String方法返回“”,所有其他方法都会死机。大多数函数和方法从不返回无效值。如果有,其文档将明确说明条件
因此,虽然Len
解决方案可能有效,但一种更具描述性的测试方法是:
if !field.IsValid() {
log.Fatalf("Unable to find [%s] in Config object", key)
}
你能提供游乐场的例子吗?谢谢!这个答案更有效。Len()==0并不总是返回所需的结果。