在Go语言中,切片作为函数参数传递时,其本质是值传递,但实际上包含了一个指针(指向底层数组的起始地址),以及长度和容量。因此,当你在函数内部对切片进行修改时,会影响到外部的切片,因为底层的数组被修改了。
例如,以下代码展示了这一点:
package main
import "fmt"
func modifySlice slice {
slice[0] = 10 // 修改切片的第一个元素
}
func main() {
var s = []int{1, 2, 3}
fmt.Println(s) // 输出: [1 2 3]
modifySlice(s)
fmt.Println(s) // 输出: [10 2 3]
}
在这个例子中,modifySlice
函数通过值传递接收到了切片s
的副本,但由于切片包含了指向底层数组的指针,因此在函数内部对切片的修改会影响到外部的切片。