2016-06-28 20 views
1

我需要检查接口的值是否为零。检查在没有使用反射的情况下接口值是否为零

但是,通过使用反射它给我的错误:

reflect: call of reflect.Value.Bool on struct Value.

通过nil它是不会放弃的错误nil值。

+3

相关问题,请阅读答案:[隐藏零值,了解为什么golang在这里失败](http://stackoverflow.com/questions/29138591/hiding-nil-values-understanding-why-golang-fails-here) – icza

+1

Normaly你应该尽量避免使用反射包。你为什么要检查界面是否为零?也许接口的使用并不是最优的,你可以使用接口的实现。 – apxp

回答

4

有两件事: 如果y是nil接口本身(在这种情况下y == nil将为真),或者如果y是非零接口但基础值是零值(在这种情况下y ==零将是假的)。

Here's一个例子。

1

接口是一对(type, value),当您将接口与nil进行比较时,您将对(type,value)与nil进行比较。要仅比较接口值,您必须将其转换为结构(通过类型断言)或使用反射。

做一个类型断言,当你知道了接口的类型

if i.(bool) == nil { 
} 

否则,如果你不知道的基本类型的接口,你可能不得不使用反射

if reflect.ValueOf(i).IsNil() { 
} 
相关问题