首页 >后端开发 >Golang >为什么设置一个 Go 变量会覆盖另一个变量?

为什么设置一个 Go 变量会覆盖另一个变量?

DDD
DDD原创
2024-10-24 08:09:30955浏览

Why Does Setting One Go Variable Overwrite the Other?

Go 变量被覆盖

在这段代码中,作者遇到了设置 pathB 时变量 pathA 被覆盖的问题。这表明两个变量都引用相同的底层数组,导致对一个变量的修改影响另一个变量。

问题源于 Go 中对切片使用append() 函数。当向切片追加元素时,Go 检查底层数组是否有足够的容量来容纳新元素。如果没有,它会分配一个更大的数组并复制现有元素。

在提供的代码中,切片路由用于创建 pathA 和 pathB。如果附加到路径 A 或路径 B 时超出了基础路由数组的容量,则会分配一个新数组。然而,由于pathA和pathB都源自同一个切片,因此它们共享相同的底层数组。

为了避免这个问题,有必要在使用它初始化pathA和pathB之前创建一个独立的路由副本。这可以使用 make() 和 copy() 函数来实现,如作者的第二次编辑所示:

<code class="go">newRoute := make([]int, len(prePaths[i]), (cap(prePaths[i])+1)*2)
copy(newRoute, prePaths[i])

pathA := append(newRoute, nextA)
pathB := append(prePaths[i], nextB)</code>

在此修订后的代码中,newRoute 是一个具有自己的底层数组的单独切片。这可确保路径 A 和路径 B 具有独立的数据副本,防止对其中一个的修改影响另一个。

以上是为什么设置一个 Go 变量会覆盖另一个变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn