很多情况下在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只能用于struct和interface的指针。如果是这样, 那意味着什么? 而 当我们用它来比较其他对象,他们如何比较,换句话说,如何golang确定一个对象是零 ?
nil
编辑:例如,如果接口为nil,则其类型和值必须同时为nil。 golang如何做到这一点?
在Go中,nil是 指针,接口,映射,切片,通道和函数类型 的 零值 ,表示 未初始化的 值。
nil并不意味着某种“未定义”状态,它本身就是一个适当的值。Go中的对象nil仅当且仅当其值为is时nil,才可以是上述类型之一。
error与接口不同,an 是一个接口,nil一个有效值也是如此string。出于明显的原因,nil错误代表 没有错误 。
error
string