Golang函数参数传递基本上是按值传递的,slice也与之相同,因此传递变量的指针是不同的。
1 | func main(){ |
为什么可以通过slice仍然可以访问相同的元素?原因是由值传递的slice所保持的数组的指针是相同的。
1 | func main(){ |
1 | func main(){ |
当由函数参数传递时
如果append到函数内部,它将与调用者Slice看到的array不同。因此,函数内的array增加,但调用者的Slice不会改变。
1 | func main() { |
当有足够的容量时,Slice不会重新排列,所以内容永远不会改变。
1 | func main() { |
当由函数参数传递时
1 | func main() { |
即使它们指向相同的地址,打印值也不同。这是因为调用者的Slice长度尚未更新。add()
在函数中,它append
也4
变为len ,但由于调用者的是一个单独的对象,因此3
它保持不变。
在这种情况下,如果还想更新调用者
1 | func main() { |