我需要检查接口值是否为'nil。
但是使用反射会给我一个错误:
反映:在struct Value上调用reflect.Value.Bool。
通过nil
,它没有为nil
值提供错误。
答案 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一个例子。