我需要检查接口的值是否为零。检查在没有使用反射的情况下接口值是否为零
但是,通过使用反射它给我的错误:
reflect: call of reflect.Value.Bool on struct Value.
通过nil
它是不会放弃的错误为nil
值。
我需要检查接口的值是否为零。检查在没有使用反射的情况下接口值是否为零
但是,通过使用反射它给我的错误:
reflect: call of reflect.Value.Bool on struct Value.
通过nil
它是不会放弃的错误为nil
值。
有两件事: 如果y是nil接口本身(在这种情况下y == nil将为真),或者如果y是非零接口但基础值是零值(在这种情况下y ==零将是假的)。
Here's一个例子。
接口是一对(type, value)
,当您将接口与nil进行比较时,您将对(type,value)与nil进行比较。要仅比较接口值,您必须将其转换为结构(通过类型断言)或使用反射。
做一个类型断言,当你知道了接口的类型
if i.(bool) == nil {
}
否则,如果你不知道的基本类型的接口,你可能不得不使用反射
if reflect.ValueOf(i).IsNil() {
}
相关问题,请阅读答案:[隐藏零值,了解为什么golang在这里失败](http://stackoverflow.com/questions/29138591/hiding-nil-values-understanding-why-golang-fails-here) – icza
Normaly你应该尽量避免使用反射包。你为什么要检查界面是否为零?也许接口的使用并不是最优的,你可以使用接口的实现。 – apxp