空切片问题

sharkLoc · · 1174 次点击
没错,切片底层确实是一个结构体,但是这个结构体可以理解为底层数组的引用。此引用当然跟C++的引用不是一样的概念,你可以搜一下goalng的引用类型,开发者已经约定成俗的认为slice、map和channel为引用类型了。你上边说slice不能与nil做比较是不对的,因为slice只有在new或者make之后才会分配内存,只是var s []int,这样的话,s确实是nil。还有你贴出来的代码,想证明slice不是引用,也是不对的,结果不变只是因为底层数组扩容导致了指针改变,而不能说明slice不是引用。
#14
更多评论
明白了,s1相当于已经做一次初始化,已经分配内存了,就不等于nil ![ss.png](https://static.studygolang.com/220113/8c3b175899f50612f103041c2c9c94cf.png)
#1
这种用法是不对的,不应该对slice进行nil判断,应该进行len()取长度
#2