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并不总是返回所需的结果。