一尘不染

在 golang 中 nil 是什么意思?

go

在 golang 中使用nil 的情况很多。例如:

func (u *URL) Parse(ref string) (*URL, error) {
    refurl, err := Parse(ref)
    if err != nil {
        return nil, err
    }
    return u.ResolveReference(refurl), nil
}

但我们不能这样使用它:

var str string //or var str int
str = nil

golang 编译器会抛出can't use nil as type string in assignment错误。

看起来nil只能用于结构和接口的指针。如果真是这样,那又是什么意思呢?当我们用它来比较其他对象,他们如何比较,换句话说,如何golang确定一个对象是零

编辑:例如,如果接口为零,则其类型和值必须同时为零。golang 是如何做到这一点的?


阅读 185

收藏
2021-12-24

共1个答案

一尘不染

在 Go 中,nil指针、接口、映射、切片、通道和函数类型零值,表示未初始化的值。

nil并不意味着某种“未定义”状态,它本身就是一个适当的值。Go 中的对象nil只是当且仅当它的值是nil,它只能是上述类型之一。

Anerror是一个接口,因此nil它的有效值是一个,与 a 不同string。出于显而易见的原因,nil错误代表没有错误

2021-12-24