面试官:切片作为函数参数是传值还是传引用?

对于这个问题,当你百度一轮过后,你会发现很大一部分人认为是传引用,通常他们会贴出下面这段代码进行佐证:上面代码中,在main函数里边初始化一个切片变量slice,接着调用changeSlice函数,参数为切片变量slice。

golang2021数据格式(10)数组作为函数参数

数组也可以像变量一样,作为参数传递给函数,用法如下:注意:在main( )函数中,定义数组a, 然后调用modify( )方法传递数组,同时在modify( )方法中修改数组中第一个元素。最终输出结果发现,并不会影响main( )函数中数组a的值,这一点与其它编程语言是有区别的。

golang2021数据格式(27)切片作为函数参数

前面我们说到,slice 其实是一个结构体,包含了三个成员:len, cap, array。分别表示切片长度,容量,底层数据的地址。当 slice 作为函数参数时,就是一个普通的结构体。

golang2021数据格式(66)结构体作为函数参数

结构体也可以作为函数参数,进行传递,如下所示:结构体作为函数参数进行传递,是值传递。