点击上方“我的小碗汤”,选择“置顶公众号”
精品文章,第一时间送达
最近在油管上面看了一个视频:Understanding nil,挺有意思,这篇文章就对视频做一个归纳总结,代码示例都是来自于视频。
nil是什么
相信写过Golang的程序员对下面一段代码是非常非常熟悉的了:
if err != nil {
// do something....}
当出现不等于nil的时候,说明出现某些错误了,需要我们对这个错误进行一些处理,而如果等于nil说明运行正常。那什么是nil呢?查一下词典可以知道,nil的意思是无,或者是零值。零值,zero value,是不是有点熟悉?在Go语言中,如果你声明了一个变量但是没有对它进行赋值操作,那么这个变量就会有一个类型的默认零值。这是每种类型对应的零值:
bool -> false numbers -> 0 string -> "" pointers -> nilslices -> nilmaps -> nilchannels -> nilfunctions -> nilinterfaces -> nil
举个例子,当你定义了一个struct:
type Person struct {
AgeYears int Name string Friends []Person}var p Person // Person{0, "", nil}
变量p只声明但没有赋值,所以p的所有字段都有对应的零值。那么,这个nil到底是什么呢?Go的文档中说到,nil是预定义的标识符,代表指针、通道、函数、接口、映射或切片的零值,也就是预定义好的一个变量:
type Type intvar nil Type
是不是有点惊讶?nil并不是Go的关键字之一,你甚至可以自己去改变nil的值:
var nil = errors.New("hi")
这样是完全可以编译得过的,但是最好不要这样子去做。
nil有什么用
在了解了什么是nil之后,再来说说nil有什么用。
pointers
<