首页 > 后端开发 > Golang > 正文

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

Mary-Kate Olsen
发布: 2024-10-24 08:09:02
原创
750 人浏览过

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

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!