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中文网其他相关文章!