首页 > 后端开发 > Golang > 为什么 Go Slice Range 循环在使用 `&stu` 时为映射键分配相同的地址?

为什么 Go Slice Range 循环在使用 `&stu` 时为映射键分配相同的地址?

Susan Sarandon
发布: 2024-12-06 04:14:10
原创
550 人浏览过

Why Do Go Slice Range Loops Assign the Same Address to Map Keys When Using `&stu`?

深入研究 Go Slice Range 现象

在提供的代码片段中,使用 range 关键字迭代学生结构体的切片。然而,将学生地址分配给映射揭示了一个看似令人困惑的问题:生成的映射键具有相同的地址。

要理解这种现象,重要的是要认识到在 Go 中, range 关键字会迭代切片的元素,而不是地址。这意味着范围循环内的变量 Stu 是切片元素的副本。因此,当获取 Stu 的地址并将其分配给映射键时,将存储副本的地址,而不是切片元素的地址。

要纠正此问题,需要修改代码以显式获取切片元素的地址。这可以通过使用切片索引变量 i 来实现:

for i := range s {
    m[s[i].Name] = &s[i]
}
登录后复制

此修改确保映射键保存实际切片元素的地址。

通过理解迭代之间的区别通过对元素进行切片并获取其地址,开发人员可以避免潜在的混乱,并确保在 Go 中使用切片时代码的预期行为。

以上是为什么 Go Slice Range 循环在使用 `&stu` 时为映射键分配相同的地址?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板