【问题标题】:Check if interface value is nil in Go without using reflect在不使用反射的情况下检查接口值是否在 Go 中为 nil
【发布时间】:2016-10-30 09:58:04
【问题描述】:

我需要检查 interface 值是否为 `nil。

但是通过使用 reflection 它给了我一个错误:

reflect:在结构 Value 上调用 reflect.Value.Bool。

通过nil 它不会为nil 值提供错误

【问题讨论】:

标签: reflection go interface null


【解决方案1】:

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

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

if i.(bool) == nil {
}

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

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

【讨论】:

    【解决方案2】:

    有两点: 如果 y 是 nil 接口本身(在这种情况下 y==nil 将为真),或者如果 y 是非 nil 接口但底层值是 nil 值(在这种情况下 y==nil 将为假)。

    Here's 一个例子。

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 1970-01-01
      • 2021-12-01
      • 2016-10-12
      • 2021-10-20
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多