先回想下这几者的区别:

  • 值类型 vs 引用类型
  • 值传递 vs 引用传递

golang的基础类型中,有那些值类型,又有哪些引用类型?

golang的函数传参是值传递还是引用传递?

官方说法:golang的函数传参都是值传递,即使传递的是引用类型,也是对应引用类型的地址拷贝

在我们的认知里引用类型的函数传参,在函数内部对参数修改后,外部是可见的。但是golang的切片有一点特别,在一些场景表现的像值类型。

talk is cheap , show me the code

问:输出结果是什么?

有条件的可以随手跑一下,看看结果和预期的是否一样。答案就在美女下方。

大家都喜欢的

答案是:

为什么for 循环的 add 函数内部的新增 没有效果? 而exchange函数内部的修改却生效了呢?

表现的似乎既不是引用类型也不是值类型。有想法的欢迎留言沟通。

我认为:切片是引用类型是正确的,只是 用于切片的内建函数 append 在执行的时候修改了切片的地址。