在 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错误。
can't use nil as type string in assignment
看起来nil只能用于结构和接口的指针。如果真是这样,那又是什么意思呢? 而当我们用它来比较其他对象,他们如何比较,换句话说,如何golang确定一个对象是零?
nil
编辑:例如,如果接口为零,则其类型和值必须同时为零。golang 是如何做到这一点的?
在 Go 中,nil是指针、接口、映射、切片、通道和函数类型的零值,表示未初始化的值。
nil并不意味着某种“未定义”状态,它本身就是一个适当的值。Go 中的对象nil只是当且仅当它的值是nil,它只能是上述类型之一。
Anerror是一个接口,因此nil它的有效值是一个,与 a 不同string。出于显而易见的原因,nil错误代表没有错误。
error
string