值得一看
广告
彩虹云商城
广告

热门广告位

golang指针与值类型在map更新时的不同

使用值类型时,修改副本需重新赋值回map才能更新原始数据;2. 使用指针类型可直接通过解引用修改原数据,无需重新赋值;3. 建议大结构体或频繁修改场景用指针,注意nil和并发安全问题。

golang指针与值类型在map更新时的不同

在 Go 语言中,使用指针类型和值类型作为 map 的元素时,在更新操作上会有显著差异。理解这些差异对正确修改 map 中的数据非常重要。

值类型:更新不会反映到原始数据

当 map 的值是基本类型或结构体等值类型时,通过 map[key] 获取的是该值的一个副本。直接修改这个副本并不会影响 map 中存储的原始值。

例如:

<span>type</span> Person <span>struct</span> {<br>    Name <span>string</span><br>    Age  <span>int</span><br>}<br><br>m := <span>map</span>[<span>string</span>]Person{<br>    <span>"alice"</span>: {Name: <span>"Alice"</span>, Age: 30},<br>}<br><br>p := m[<span>"alice"</span>]<br>p.Age = 31<br>fmt.Println(m[<span>"alice"</span>].Age) <span>// 输出 30,未改变</span>

要真正更新值类型字段,必须重新赋值回 map:

立即学习“go语言免费学习笔记(深入)”;

p := m[<span>"alice"</span>]<br>p.Age = 31<br>m[<span>"alice"</span>] = p <span>// 写回 map</span><br>fmt.Println(m[<span>"alice"</span>].Age) <span>// 输出 31</span>

指针类型:可直接修改原数据

如果 map 的值是指向结构体的指针,那么通过 key 取出的是指针副本,但它仍指向同一个结构体实例。因此可以直接通过解引用修改原始数据。

文心大模型

文心大模型

百度飞桨-文心大模型 ERNIE 3.0 文本理解与创作

文心大模型56

查看详情
文心大模型

示例:

m := <span>map</span>[<span>string</span>]*Person{<br>    <span>"alice"</span>: &Person{Name: <span>"Alice"</span>, Age: 30},<br>}<br><br>p := m[<span>"alice"</span>]<br>p.Age = 31 <span>// 直接修改原对象</span><br>fmt.Println(m[<span>"alice"</span>].Age) <span>// 输出 31</span>

这里不需要重新赋值,因为修改的是指针所指向的内存内容。

常见场景与建议

处理结构体较大的情况时,推荐使用指针类型存入 map,避免频繁拷贝。同时能更方便地进行字段更新。

  • 值类型适合小型、不可变或无需修改的结构
  • 指针类型更适合需要频繁修改字段的场景
  • 注意 nil 指针风险:确保 map 中的指针非 nil 再访问其字段
  • 并发环境下,即使使用指针,也需额外同步机制保护数据安全

基本上就这些。关键点在于搞清楚你拿到的是“副本”还是“通往原数据的通道”。用好指针可以简化更新逻辑,但也带来额外责任。

相关标签:

go golang 同步机制 golang指针 golang 结构体 指针 值类型 指针类型 nil map 并发

大家都在看:

Go语言中从通道获取值的正确姿势:避免阻塞与无限循环
使用 Go 语言写入文件:高效处理数值数组
使用 Go 语言与 Gitolite 集成
使用 Go 语言和 Gitolite
Go语言中select语句避免阻塞的正确姿势
温馨提示: 本文最后更新于2025-09-28 22:29:29,某些文章具有时效性,若有错误或已失效,请在下方留言或联系在线客服
文章版权声明 1 本网站名称: 创客网
2 本站永久网址:https://new.ie310.com
1 本文采用非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
2 本站所有内容仅供参考,分享出来是为了可以给大家提供新的思路。
3 互联网转载资源会有一些其他联系方式,请大家不要盲目相信,被骗本站概不负责!
4 本网站只做项目揭秘,无法一对一教学指导,每篇文章内都含项目全套的教程讲解,请仔细阅读。
5 本站分享的所有平台仅供展示,本站不对平台真实性负责,站长建议大家自己根据项目关键词自己选择平台。
6 因为文章发布时间和您阅读文章时间存在时间差,所以有些项目红利期可能已经过了,能不能赚钱需要自己判断。
7 本网站仅做资源分享,不做任何收益保障,创业公司上收费几百上千的项目我免费分享出来的,希望大家可以认真学习。
8 本站所有资料均来自互联网公开分享,并不代表本站立场,如不慎侵犯到您的版权利益,请联系79283999@qq.com删除。

本站资料仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END
喜欢就支持一下吧
点赞5赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容