修改传递给 Go 中函数的数组
与某些编程语言相反,Go 不会通过引用隐式传递数组。当数组传递给函数时,仅复制其值。因此,在函数内对传入的数组进行修改不会影响原始数组。
但是,在 Go 中,数组并没有显式声明。相反,我们使用切片,它是底层数组的动态、可调整大小的视图。当切片传递给函数时,仅复制切片描述符,其中包括指向基础数组的指针、其长度和容量。
因此,对切片元素所做的任何更改函数内的切片将反映在原始切片中,因为它们都引用相同的底层数组。
考虑以下代码示例:
<code class="go">func main() { tab := []int{1, 2, 3} fmt.Println(tab) // [1 2 3] reverse(tab) fmt.Println(tab) // [3 2 1] } func reverse(tab []int) { for i, j := 0, len(tab)-1; i < j; i, j = i+1, j-1 { tab[i], tab[j] = tab[j], tab[i] } }</code>
在此示例中,反向函数接收切片选项卡。在函数内对切片选项卡进行的修改(例如交换元素)将影响原始切片,因为它们都引用相同的底层数组。
因此,在 Go 中将数组传递给函数时,请记住仅复制切片描述符。由于对底层数组的引用,函数内对切片元素所做的任何修改都将反映在原始切片中。
以上是在 Go 中如何修改传递给函数的数组?的详细内容。更多信息请关注PHP中文网其他相关文章!