nil指针是什么?

来源:4-1 结构体和方法

阿憨阿憨

2018-11-18

老师你好,请问nil指针是什么?
请问是不是在该对象未实例化的时候, 直接获取指针的时候, 会返回一个nil?
也就是说如果想要用这个类的指针, 就必须先正常的实例化一下, 然后再用指针.

	//这里作为Nil指针的展示, go的nil指针也是可以传递的,但是注意在setValue的时候, 由于这个node并不存在,所以会报一个错误,但是传递时没问题的
	//而且下面的print也是一个nil
	var pRoot *treeNode	////这里会是一个Nil指针
	fmt.Println(pRoot)
	pRoot.setValue(200)
	//可以看到里的调用和设置时没问题的,node不会存在==nil的确情况
	//而且下面的print也是有内容的
	pRoot = &root
	fmt.Println(pRoot)
	pRoot.setValue(300)
	pRoot.print()

	//root.traverse()
写回答

1回答

ccmouse

2018-11-19

nil就是空指针。

var pRoot *treeNode这行,没有告诉它指向谁,当然就是nil。

但是Go语言中,一个很大的不同就是nil指针是可以调用方法的。我们看到方法的定义里,只是把这个所谓的“接收者”(也就是这里的pRoot)放在一个特殊的地方,不论是定义还是调用的时候有特殊的写法(比如pRoot.setValue(...)),但实际上只是传了一个参数pRoot给setValue方法的接收者,所以这里是可以为nil的。当然后面我们去试图pRoot.value什么的,那就出错了。

总结一下就是我们当然还是要实例化才可以用的,但是不实例化也不会立刻出错。他的好处我们可以看到我们的树的遍历这个例子里面,可以在方法的进口处进行统一判断。


0
1
阿憨阿憨
谢谢老师
2018-11-23
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程