一尘不染

nil在golang中是什么意思?

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只能用于struct和interface的指针。如果是这样, 那意味着什么?
当我们用它来比较其他对象,他们如何比较,换句话说,如何golang确定一个对象是零

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


阅读 442

收藏
2020-07-02

共1个答案

一尘不染

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

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

error与接口不同,an 是一个接口,nil一个有效值也是如此string。出于明显的原因,nil错误代表 没有错误

2020-07-02