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 是如何确定一个对象是 nil 的?
编辑:例如,如果接口为 nil,则其类型和值必须同时为 nil。 golang 是怎么做到的?
原文由 starkshang 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Go 中,
nil
是 指针、接口、映射、切片、通道和函数类型的零值,代表 未初始化 的值。nil
并不意味着一些“未定义”状态,它本身就是一个适当的值。 Go 中的对象是nil
仅当且仅当它的值为nil
时,只有当它是上述类型之一时它才可能是。error
是一个接口,因此nil
是一个有效值,与string
不同。由于显而易见的原因,anil
错误表示 _没有错误_。