在Go语言中,数组作为参数传递给函数时,可以选择值传递或指针传递。这两种方式在行为上有显著的区别,主要体现在对原始数组的影响和性能上。
当数组通过值传递的方式传递给函数时,函数会接收到数组的一个副本。这意味着在函数内部对数组的任何修改都不会影响到原始数组。
package main
import "fmt"
func modifyArray(arr [3]int) {
arr[0] = 100
fmt.Println("Inside modifyArray:", arr)
}
func main() {
arr := [3]int{1, 2, 3}
modifyArray(arr)
fmt.Println("After modifyArray:", arr)
}
Inside modifyArray: [100 2 3]
After modifyArray: [1 2 3]
modifyArray
函数内部,修改的是数组的副本,因此原始数组arr
在函数调用后保持不变。当数组通过指针传递的方式传递给函数时,函数会接收到数组的指针(即数组的内存地址)。这意味着在函数内部对数组的任何修改都会直接影响到原始数组。
package main
import "fmt"
func modifyArray(arr *[3]int) {
arr[0] = 100
fmt.Println("Inside modifyArray:", *arr)
}
func main() {
arr := [3]int{1, 2, 3}
modifyArray(&arr)
fmt.Println("After modifyArray:", arr)
}
Inside modifyArray: [100 2 3]
After modifyArray: [100 2 3]
modifyArray
函数内部,通过指针修改的是原始数组arr
,因此函数调用后原始数组的内容发生了变化。根据具体需求选择合适的传递方式,可以有效提升代码的性能和可维护性。