面试题答案
一键面试在Go语言中,切片作为函数参数传递时,函数内部对切片的修改会影响到函数外部的切片。这是因为切片本身是一个引用类型,传递的是底层数组的引用。
示例代码如下:
package main
import "fmt"
func modifySlice(s []int) {
s[0] = 100 // 修改切片的第一个元素
}
func main() {
originalSlice := []int{1, 2, 3}
fmt.Println("Before modification:", originalSlice)
modifySlice(originalSlice)
fmt.Println("After modification:", originalSlice)
}
在上述代码中:
originalSlice
是一个切片,包含元素{1, 2, 3}
。- 当
originalSlice
作为参数传递给modifySlice
函数时,函数内部对s[0]
的修改,实际上修改的是originalSlice
底层数组的第一个元素。 - 所以在
main
函数中再次打印originalSlice
时,会看到第一个元素已经被修改为100
。
切片数据结构包含三个部分:指向底层数组的指针、切片的长度、切片的容量。当切片作为参数传递时,传递的是这个数据结构的副本,而指针指向的是同一个底层数组,因此对切片的修改会影响到外部。