在不使用反射的情况下检查Go中的接口值是否为零

时间:2016-06-28 07:41:20

标签: reflection go interface null

我需要检查接口值是否为'nil。

但是使用反射会给我一个错误:

  

反映:在struct Value上调用reflect.Value.Bool。

通过nil,它没有为nil值提供错误

2 个答案:

答案 0 :(得分:9)

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

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

if i.(bool) == nil {
}

否则,如果您不知道接口的基础类型,则可能必须使用反射

if reflect.ValueOf(i).IsNil() {
}

答案 1 :(得分:5)

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

Here's一个例子。