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