先回想下这几者的区别:
- 值类型 vs 引用类型
- 值传递 vs 引用传递
golang的基础类型中,有那些值类型,又有哪些引用类型?
golang的函数传参是值传递还是引用传递?
官方说法:golang的函数传参都是值传递,即使传递的是引用类型,也是对应引用类型的地址拷贝。
在我们的认知里引用类型的函数传参,在函数内部对参数修改后,外部是可见的。但是golang的切片有一点特别,在一些场景表现的像值类型。
talk is cheap , show me the code
问:输出结果是什么?
有条件的可以随手跑一下,看看结果和预期的是否一样。答案就在美女下方。
答案是:
为什么for 循环的 add 函数内部的新增 没有效果? 而exchange函数内部的修改却生效了呢?
表现的似乎既不是引用类型也不是值类型。有想法的欢迎留言沟通。
我认为:切片是引用类型是正确的,只是 用于切片的内建函数 append 在执行的时候修改了切片的地址。