采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
不完全是这样。我们看:
func (q *Queue) Push(v int) {
*q = append(*q, v)
}
关键在于append会返回一个新的slice。q本身的值(到底是哪个切片)会在append之后改变。
不用指针我们可以改变q[0], q[1]等,但是q本身是哪个slice还是需要使用指针才能接收。
老师能通俗一点讲么。。这个没听懂
老师我能简单的理解成,Go是没有引用传递的,slice只是引用类型,它传递的时候也是对他进行拷贝的值传递,所以要加*。是这个意思吗?
是的。不用指针我们可以改变q[0], q[1]等。 但是append不一样。append的用法是: newSlice = append(oldSlice, v) append有可能会造成数据的重新分配。这句话运行后,oldSlice仍然没有v,但是newSlice才有v。 再结合你说的slice传递的时候也是对他进行拷贝的值传递,所以这里需要加*
登录后可查看更多问答,登录/注册
语法+分布式爬虫实战 为转型工程师量身打造
3.8k 14
731 1
2.1k 1
1.1k 12