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

har*_*low 3 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() {
}
Run Code Online (Sandbox Code Playgroud)

ANi*_*sus 5

正如你已经提到,该文件reflect包说:

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

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

零值表示没有值。它的 IsValid 方法返回 false,它的 Kind 方法返回 Invalid,它的 String 方法返回 "",所有其他方法都发生 panic。大多数函数和方法从不返回无效值。如果有,其文档明确说明了条件。

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

if !field.IsValid() {
  log.Fatalf("Unable to find [%s] in Config object", key)
}
Run Code Online (Sandbox Code Playgroud)