首页  >  文章  >  后端开发  >  Go 变量是否因切片误解而被覆盖?

Go 变量是否因切片误解而被覆盖?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-24 08:09:02736浏览

Are Go Variables Being Overwritten Due to Slice Misunderstanding?

Go 变量被覆盖(Bug?)

在这种情况下,问题在于理解切片在 Go 中的功能。切片由指向数组的指针及其长度和容量组成。将元素附加到切片时,它首先检查扩展切片是否会超出其底层数组的容量。如果是,则分配一个更大的数组,将现有元素复制到其中,并更新容量。然后,新元素被添加到数组的末尾,并且长度被更新。

在您的代码中,您有以下几行:

<code class="go">pathA := append(route, nextA)
pathB := append(route, nextB)</code>

这里有两种可能性:

  1. 如果 len(route) 等于 cap(route),将分配一个新的后备数组,并且 pathA 和 pathB 将具有不同的值。
  2. 如果 len(route) 是小于 cap(route),pathA 和 pathB 最终将共享相同的后备数组。数组中的最后一个元素将是 nextB,因为它是第二个执行的。

看起来第一种情况对于初始循环迭代来说是正确的,之后第二种情况发生。可以通过使用 copy() 和 make() 手动为这些路径之一制作副本来解决此问题。

以上是Go 变量是否因切片误解而被覆盖?的详细内容。更多信息请关注PHP中文网其他相关文章!

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