我试图弄清楚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)
正如你已经提到,该文件的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)
| 归档时间: |
|
| 查看次数: |
1022 次 |
| 最近记录: |