![go语言中函数参数[]int和[3]int的区别是什么?](https://img.php.cn/upload/article/001/246/273/174037047364988.jpg)
Go语言函数参数:[]int 与 [3]int 的区别
Go语言中,函数参数可以是数组或切片。数组是长度固定的数据集合,而切片是动态长度的、基于数组的视图。这种差异导致了函数参数传递行为上的显著区别。
示例对比:
以下代码演示了向函数传递数组和切片作为参数的不同结果:
立即学习“go语言免费学习笔记(深入)”;
// 示例1:传递数组 [3]int
func modifyArray(arr [3]int) {
arr[1] = 0
}
func main() {
arr := [3]int{1, 2, 3}
modifyArray(arr)
fmt.Println(arr) // 输出:[1 2 3]
}
// 示例2:传递切片 []int
func modifySlice(arr []int) {
arr[1] = 0
}
func main() {
arr := []int{1, 2, 3}
modifySlice(arr)
fmt.Println(arr) // 输出:[1 0 3]
}
行为差异分析:
-
示例1: 函数
modifyArray接收一个[3]int类型的数组作为参数。Go语言在函数调用时会复制整个数组,因此函数内部对数组的修改不会影响原始数组。 -
示例2: 函数
modifySlice接收一个[]int类型的切片作为参数。切片本身并不包含数据,它只包含指向底层数组的指针、长度和容量信息。因此,函数内部对切片的修改会直接影响原始切片所指向的底层数组。
核心区别总结:
- 数组是值类型,传递数组参数时会复制整个数组。
- 切片是引用类型,传递切片参数时只复制切片的元数据(指针、长度、容量),不复制底层数组。
因此,当需要在函数内部修改数据并影响调用者时,应该使用切片作为参数;如果不需要修改原始数据,则可以使用数组。 选择哪种类型取决于函数的功能需求。










