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

man*_*p.s 8 reflection null interface go

我需要检查接口值是否为"nil".

但通过使用反射,它给了我一个错误:

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

通过nil它没有给人一种错误nil价值.

tha*_*hpk 12

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

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

if i.(bool) == nil {
}
Run Code Online (Sandbox Code Playgroud)

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

if reflect.ValueOf(i).IsNil() {
}
Run Code Online (Sandbox Code Playgroud)


Yas*_*ava 5

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

这是一个例子.