Go 中如何区分 nil 错误值

问题描述 投票:0回答:1
func assert(v any) {
    if v == nil {
        fmt.Println("v is nil")
    } else {
        fmt.Println("v is NOT nil")
    }
}

type class struct{}

func main() {
    var c *class
    if c == nil {
        fmt.Println("c is nil")
    }
    assert(c)
}

该程序将输出:

c is nil
v is NOT nil

要真正知道 v 为零,我必须重写

assert
:

func assert(v any) {
    if v == nil || reflect.ValueOf(v).IsNil() {
        fmt.Println("v is nil")
    } else {
        fmt.Println("v is NOT nil")
    }
}

我知道原因,也完全理解Go在这件事上的设计。我的问题是:

  1. 使用
    reflect.ValueOf()
    对性能有何影响?
  2. 如果这个操作很昂贵,有什么方法可以在不使用反射的情况下知道这一点? 就我而言,我只想知道符合 error 接口的指针实际上是否为零? 限制是
    v
    中的参数
    assert(v)
    必须 类型为
    any
go interface
1个回答
0
投票

这在 Go FAQ 中得到了回答 “为什么我的 nil 错误值不等于 nil?”

基本上,由于接口有类型,所以它不是

nil

© www.soinside.com 2019 - 2024. All rights reserved.