Go语言中函数的参数有两种传递方式:按值传递和按引用传递。
Go默认使用按值传递来传递参数,也就是传递参数的副本。在函数中对副本的值进行更改操作时,不会影响到原来的变量。
最明显的就是看函数返回值,如果是数组必须传递值不能传递nil 而切片可以传递nil
注意:
Go语言中,在函数调用时,引用类型( slice map interface channel )都默认使用引用传递,其他数据类型比如 int string struct 需要显式指定使用指针也才是引用传递
引用传递会更改函数外部的值
注意:切片是引用传值,但是有些情况不会改变外部数据,比如当切片扩容的时候,底层指向的数组是不会更改外部值得
但是slice又不太一样,对slice append 是不会改变函数外部的值的 ( 不管扩容与否 ) (直接对下标更改才会影响外部的值)
map的传值默认就是引用传值,而struct的传值默认是值传递
map的传值默认就是引用传值,而struct的传值默认是值传递
map的传值默认就是引用传值,而struct的传值默认是值传递
输出值
博客:
https://zhuanlan.zhihu.com/p/366908019
https://www.cnblogs.com/wang_yb/p/12126884.html