很多情况下在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"表示变量不引用实例(在其他语言中等效于空指针)
  • 它是类型函数,映射,接口,通道和结构的变量的零值