很多情况下在golang中使用nil。 例如:
但是我们不能这样使用它:
Golang编译器将抛出can't use nil as type string in assignment错误。
看起来nil只能用于struct和interface的指针。 如果是这样,那意味着什么?
当我们使用它与另一个对象进行比较时,它们如何进行比较,换句话说,golang如何确定一个对象为零?
在Go中,nil是指针,接口,映射,切片,通道和函数类型的零值,表示未初始化的值。
nil并不意味着某些"未定义"状态,它本身就是一个适当的值。仅当且仅当它的值是nil时,Go中的对象才是nil,只有当它是上述类型之一时,它才可以是。
error是接口,因此nil是一个有效值,与string不同。由于明显的原因,nil错误表示没有错误。
Go中的nil只是其他语言的NULL指针值。
您可以有效地使用它代替任何指针或接口(接口在某种程度上是指针)。
您可以将其用作错误,因为错误类型是接口。
您不能将其用作字符串,因为在Go中,字符串是一个值。
在Go中未键入nil,这意味着您不能这样做:
因为这里缺少n的类型。但是,你可以做
请注意,nil是指针和接口的零值,未初始化的指针和接口将是nil。
-
对于像切片和指针这样的数据类型,它们"引用"其他类型," nil"表示变量不引用实例(在其他语言中等效于空指针)
-
它是类型函数,映射,接口,通道和结构的变量的零值