MST

星途 面试题库

面试题:Go语言中切片作为函数参数传递的特点

在Go语言里,切片作为函数参数传递时,函数内部对切片的修改会影响到函数外部的切片吗?请举例说明其原理。
42.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在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)
}

在上述代码中:

  1. originalSlice 是一个切片,包含元素 {1, 2, 3}
  2. originalSlice 作为参数传递给 modifySlice 函数时,函数内部对 s[0] 的修改,实际上修改的是 originalSlice 底层数组的第一个元素。
  3. 所以在 main 函数中再次打印 originalSlice 时,会看到第一个元素已经被修改为 100

切片数据结构包含三个部分:指向底层数组的指针、切片的长度、切片的容量。当切片作为参数传递时,传递的是这个数据结构的副本,而指针指向的是同一个底层数组,因此对切片的修改会影响到外部。