所有类型的函数参数都是传值的!
包括slice
/map
/chan
等基础类型和自定义的类型都是传值的.
但是因为slice
和map
/chan
底层结构的差异, 又导致了它们传值的影响并不完全等同.
重点归纳如下:
- GoSpec: the parameters of the call are passed by value!
- map/slice/chan 都是传值, 不是传引用
- map/chan 对应指针, 和引用类似
-
slice 是结构体和指针的混合体
-
slice 含 values/count/capacity 等信息, 是按值传递
- slice 中的 values 是指针, 按值传递
-
按值传递的 slice 只能修改values指向的数据, 其他都不能修改
-
以指针或结构体的角度看, 都是值传递!