Go编程中的陷阱:为什么代码中输出的名字都是“博客”?

go编程中的陷阱:为什么代码中输出的名字都是“博客”?

Go语言陷阱:循环与指针的误用导致输出全为“博客”

Go语言简洁高效,但其细微之处也容易造成困扰。本文剖析一个常见的Go语言面试题,解释为何代码输出结果全部为“博客”。

以下代码片段演示了这个问题:

type student struct {    name string    age  int}func main() {    m := make(map[string]*student)    stus := []student{        {name: "pprof.cn", age: 18},        {name: "测试", age: 23},        {name: "博客", age: 28},    }    for _, stu := range stus {        m[stu.name] = &stu    }    for k, v := range m {        fmt.Println(k, "=>", v.name)    }}

运行结果令人意外:所有输出均为“博客”。究其原因,在于for...range循环及指针的用法。

问题根源:循环变量复用与指针指向

循环变量复用: Go语言的for...range循环会复用循环变量stu。这意味着stu始终指向同一内存地址。

指针引用: 代码中m[stu.name] = &stu使用指针,每次迭代都将stu的内存地址赋值给map。由于stu的地址不变,所有map的值都指向同一地址。

最后一次赋值: 循环结束后,stu保存了最后一个学生的信息(“博客”)。因此,map中所有键值都指向这个最终的stu地址。

输出结果: 打印v.name时,所有指针都指向同一个“博客”数据,故输出结果全为“博客”。

解决方案:避免指针直接引用循环变量

为了避免此问题,应在循环内创建新的student结构体副本,而不是直接使用stu的指针:

for _, stu := range stus {    s := stu // 创建副本    m[stu.name] = &s}

这样,每个map的键值对都指向不同的内存地址,从而正确输出每个学生的名字。

总结:谨慎使用指针和理解循环变量

此例警示我们在Go语言中使用指针时需格外谨慎,尤其在循环和切片操作中。理解for...range循环的变量复用机制是避免此类问题的关键。 避免直接将循环变量的地址赋值给map或其他数据结构,而是创建副本后再使用指针,是更安全的做法。

以上就是Go编程中的陷阱:为什么代码中输出的名字都是“博客”?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1386186.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
在Go语言中使用Oracle驱动是否需要安装Oracle客户端?
上一篇 2025年12月15日 06:05:18
Go语言中如何在Redis存储JSON字符串时处理隐藏字段的问题?
下一篇 2025年12月15日 06:05:34

相关推荐

  • Gmail API Java REST服务无用户干预授权指南

    Gmail API Java REST服务无用户干预授权指南Gmail API Java REST服务无用户干预授权指南Gmail API Java REST服务无用户干预授权指南Gmail API Java REST服务无用户干预授权指南

    本文详细阐述了在Java REST服务中,如何实现对Gmail API的无用户干预访问。核心方案是针对Google Workspace账户使用服务账户的域范围委派(Domain-Wide Delegation),实现对用户邮箱的模拟操作。对于标准Gmail账户,则需通过OAuth 2.0流程获取一次…

    2026年10月5日 • 用户投稿
    000
  • 中国工厂魔改RTX 5090:显存4倍扩容高达128G

    中国工厂魔改RTX 5090:显存4倍扩容高达128G中国工厂魔改RTX 5090:显存4倍扩容高达128G中国工厂魔改RTX 5090:显存4倍扩容高达128G中国工厂魔改RTX 5090:显存4倍扩容高达128G

    据外媒playground披露,中国部分工厂正集中精力基于英伟达GeForce RTX系列打造专用于人工智能计算的定制显卡,以应对近年来持续升温的AI算力需求。不同于常规游戏版显卡配备的24GB显存,这些特殊版本如RTX 4090已实现48GB甚至96GB显存配置(后者为极个别案例)。如今,这一趋势…

    2026年10月5日 • 用户投稿
    200
  • win8纯净版系统安装教程_一步步教你安装无捆绑的Win8系统

    win8纯净版系统安装教程_一步步教你安装无捆绑的Win8系统win8纯净版系统安装教程_一步步教你安装无捆绑的Win8系统win8纯净版系统安装教程_一步步教你安装无捆绑的Win8系统win8纯净版系统安装教程_一步步教你安装无捆绑的Win8系统

    首先使用U盘制作启动盘安装Windows 8,依次准备U盘、下载ISO、用软碟通写入镜像、从U盘启动并完成系统安装;其次可通过PE环境一键还原GHO/WIM镜像至C盘实现部署;最后还可解压ISO到非系统盘并运行setup.exe进行硬盘直接安装。 如果您需要在电脑上安装一个干净、无预装软件的Wind…

    2026年10月5日 • 用户投稿
    200
  • 幕布大纲笔记的无限层级怎么用_幕布无限层级结构使用技巧

    幕布大纲笔记的无限层级怎么用_幕布无限层级结构使用技巧幕布大纲笔记的无限层级怎么用_幕布无限层级结构使用技巧幕布大纲笔记的无限层级怎么用_幕布无限层级结构使用技巧幕布大纲笔记的无限层级怎么用_幕布无限层级结构使用技巧

    幕布大纲笔记通过Tab键实现无限层级结构,支持逐级缩进与提升,结合折叠功能和拖拽调整,配合快捷键操作,可高效整理复杂信息并优化逻辑架构。 如果您希望在整理复杂信息时实现更清晰的逻辑结构,幕布的大纲笔记功能通过无限层级设计能够帮助您逐层展开思路。以下是使用该功能的具体方法: 本文运行环境:MacBoo…

    2026年10月5日 • 用户投稿
    900
  • 11 个 免费学习 AI 的飞书知识库,完全免费,必须收藏!

    11 个 免费学习 AI 的飞书知识库,完全免费,必须收藏!11 个 免费学习 AI 的飞书知识库,完全免费,必须收藏!11 个 免费学习 AI 的飞书知识库,完全免费,必须收藏!11 个 免费学习 AI 的飞书知识库,完全免费,必须收藏!

    当前市面上关于AI的学习内容相对较少,很多机构都以销售课程为目的进行引流和收割。苏米整理了11个免费学习AI的飞书知识库,内容十分全面且详细,虽然有一些广告,但整体上仍能系统性地学习AI相关内容。由于内容较多,这里仅作简要梳理,大家可以依据需求自行查看学习,同时也要感谢每位知识库作者的无私分享! ☞…

    2026年10月5日 • 用户投稿
    000
  • 如何用Java实现Socket粘包处理 Java分包与重组技术讲解

    如何用Java实现Socket粘包处理 Java分包与重组技术讲解如何用Java实现Socket粘包处理 Java分包与重组技术讲解如何用Java实现Socket粘包处理 Java分包与重组技术讲解如何用Java实现Socket粘包处理 Java分包与重组技术讲解

    在java中处理socket粘包问题,核心方法是使用长度前缀法。1.发送端先发送数据长度,再发送实际数据;2.接收端先读取长度,再循环读取指定字节数以确保完整接收一个数据包。tcp是流式协议,不具备消息边界概念,导致粘包(多个小包合并发送)或拆包(大包分段发送)现象。通过在应用层定义协议,在每个数据…

    2026年10月5日 • 用户投稿
    100
  • 深入解析:Java REST服务中Gmail API的无用户干预访问策略

    深入解析:Java REST服务中Gmail API的无用户干预访问策略深入解析:Java REST服务中Gmail API的无用户干预访问策略深入解析:Java REST服务中Gmail API的无用户干预访问策略深入解析:Java REST服务中Gmail API的无用户干预访问策略

    本文旨在为Java REST服务集成Gmail API提供详尽指南,重点解决如何在无需用户反复干预的情况下实现API访问。文章将阐述两种主要策略:针对Google Workspace域账户的域范围授权(Domain-Wide Delegation, DWD)结合服务账户,以及针对标准Gmail账户的…

    2026年10月5日 • 用户投稿
    000
  • 20款核心AI API 开发人员必备,涵盖文本生成、语音处理、图像识别、视频编辑四大领域

    20款核心AI API 开发人员必备,涵盖文本生成、语音处理、图像识别、视频编辑四大领域20款核心AI API 开发人员必备,涵盖文本生成、语音处理、图像识别、视频编辑四大领域20款核心AI API 开发人员必备,涵盖文本生成、语音处理、图像识别、视频编辑四大领域20款核心AI API 开发人员必备,涵盖文本生成、语音处理、图像识别、视频编辑四大领域

    ai api正以前所未有的速度重塑技术开发格局。从生成式文本到多模态内容生成,从智能客服到工业级视觉识别,开发者仅需几行代码便能轻松获取顶级ai能力。随着技术不断进步,更多创新工具如deepseek、cohere等强势登场,进一步降低了ai集成的门槛。 ☞☞☞AI 智能聊天, 问答助手, AI 智能…

    2026年10月5日 • 用户投稿
    000
  • 手把手教你如何用海螺Ai克隆自己的声音,支持情绪化的声音克隆

    手把手教你如何用海螺Ai克隆自己的声音,支持情绪化的声音克隆手把手教你如何用海螺Ai克隆自己的声音,支持情绪化的声音克隆手把手教你如何用海螺Ai克隆自己的声音,支持情绪化的声音克隆手把手教你如何用海螺Ai克隆自己的声音,支持情绪化的声音克隆

    语音克隆技术早已不再是新鲜事物,之前大火的Chat TTS想必大家都听说过,不过它还是需要自己动手部署,流程相对复杂。今天苏米测试了一款新推出的海螺AI海外版语音克隆功能,仅需60秒就能复制你的声音,只需10到60秒的音频样本即可完美复刻声音。 苏米亲自体验了一下,发现它操作极其简便,生成效果令人震…

    2026年10月5日 • 用户投稿
    000
  • Java REST 服务中实现 Gmail API 无人值守访问的策略与实践

    Java REST 服务中实现 Gmail API 无人值守访问的策略与实践Java REST 服务中实现 Gmail API 无人值守访问的策略与实践Java REST 服务中实现 Gmail API 无人值守访问的策略与实践Java REST 服务中实现 Gmail API 无人值守访问的策略与实践

    本文深入探讨了Java REST服务在无需用户持续干预下访问Gmail API的多种策略。核心内容包括针对Google Workspace域账户的域范围委派(Domain-Wide Delegation)方案,以及针对标准Gmail账户的OAuth 2.0刷新令牌机制。文章详细阐述了每种方法的实现原…

    2026年10月5日 • 用户投稿
    000
  • 《忍者龙剑传4》性能细节曝光!XSX支持120帧模式

    《忍者龙剑传4》性能细节曝光!XSX支持120帧模式《忍者龙剑传4》性能细节曝光!XSX支持120帧模式《忍者龙剑传4》性能细节曝光!XSX支持120帧模式《忍者龙剑传4》性能细节曝光!XSX支持120帧模式

    据windows central报道,备受期待的动作游戏《忍者龙剑传4》(ninja gaiden 4)的性能细节近日得以披露,该作将于xbox series x上提供120fps的高帧率模式。 报道称,在Xbox Series X主机上,玩家将能够选择以牺牲部分画质为代价,将帧率从标准的60FPS…

    2026年10月5日 • 用户投稿
    000
  • 为什么Windows无法打开BMP文件?修复图片查看器的简单方法

    为什么Windows无法打开BMP文件?修复图片查看器的简单方法为什么Windows无法打开BMP文件?修复图片查看器的简单方法为什么Windows无法打开BMP文件?修复图片查看器的简单方法为什么Windows无法打开BMP文件?修复图片查看器的简单方法

    BMP文件打不开通常因文件关联错误或系统问题导致,可先尝试用第三方软件打开以判断是文件还是系统故障,再通过修改默认应用、修复照片应用或使用SFC和DISM命令修复系统文件来解决。 Windows无法打开BMP文件,这确实是个让人头疼的小问题,但通常不是什么大毛病。在我看来,这多半是你的系统在处理这类…

    2026年10月5日 • 用户投稿
    000
  • 如何高效捕获PHP应用中的异常与错误?使用Composer和Airbrake/PHPBrake轻松实现实时监控

    如何高效捕获PHP应用中的异常与错误?使用Composer和Airbrake/PHPBrake轻松实现实时监控如何高效捕获PHP应用中的异常与错误?使用Composer和Airbrake/PHPBrake轻松实现实时监控如何高效捕获PHP应用中的异常与错误?使用Composer和Airbrake/PHPBrake轻松实现实时监控如何高效捕获PHP应用中的异常与错误?使用Composer和Airbrake/PHPBrake轻松实现实时监控

    可以通过一下地址学习composer:学习地址 在现代PHP应用开发中,我们追求的不仅仅是功能的实现,更是应用的稳定性与健壮性。然而,在实际部署上线后,各种意想不到的异常和错误总是会悄然发生。你是否也曾遇到过这样的困境:用户抱怨某个页面突然空白,或者某个操作没有响应,而你却只能通过翻阅海量的服务器日…

    2026年10月5日 • 用户投稿
    500
  • Kafka Streams 中的重新分区机制详解

    Kafka Streams 中的重新分区机制详解Kafka Streams 中的重新分区机制详解Kafka Streams 中的重新分区机制详解Kafka Streams 中的重新分区机制详解

    Kafka Streams 在对数据流进行处理时,如果需要修改消息的键(key),例如通过 selectKey 或 map 等操作,Kafka Streams 会自动创建一个内部的重新分区主题(repartitioned topic)。这是因为 Kafka Streams 依赖于键进行数据流的聚合、…

    2026年10月5日 • 用户投稿
    100
  • 豆包AI如何制作分屏视频?多画面拼接技巧

    豆包ai制作分屏视频的基本步骤包括:1. 选择和导入视频源,2. 在拼接界面调整视频位置和大小,3. 预览效果,4. 导出视频;优化视觉效果的方法有:1. 使用“色彩校正”工具调整色调,2. 注意剪辑点避免跳跃感,3. 添加统一的滤镜风格;常见问题及解决方法包括:1. 通过“时间轴”功能解决视频同步…

    2026年10月5日
    000
  • 中国主流家电征战欧洲!海尔洗衣机量、额双第一

    中国主流家电征战欧洲!海尔洗衣机量、额双第一中国主流家电征战欧洲!海尔洗衣机量、额双第一中国主流家电征战欧洲!海尔洗衣机量、额双第一中国主流家电征战欧洲!海尔洗衣机量、额双第一

    欧洲家电市场长期被视为中国品牌出海的“高难度赛道”,不仅汇聚了众多历史悠久的本土品牌,还拥有对产品品质极为挑剔的消费群体。根据gfk consumer life 2024年的调研数据,超过半数西欧消费者倾向于选择“本国制造”的家电产品,叠加日益严苛的能效与环保法规,中国品牌要在这一市场站稳脚跟,挑战…

    2026年10月5日 • 用户投稿
    200
  • 如何在Java中实现URL自动编码 Java处理URL参数编码技巧

    如何在Java中实现URL自动编码 Java处理URL参数编码技巧如何在Java中实现URL自动编码 Java处理URL参数编码技巧如何在Java中实现URL自动编码 Java处理URL参数编码技巧如何在Java中实现URL自动编码 Java处理URL参数编码技巧

    在java中实现url自动编码的核心在于使用java.net.urlencoder和java.net.uri类。1. urlencoder.encode()用于对单个字符串进行url编码,尤其适用于查询参数值的编码,必须指定字符集(推荐utf-8);2. uri类用于构建结构化的url,能智能处理各…

    2026年10月5日 • 用户投稿
    100
  • 我用Claude 4拆解了Claude 4的系统提示词

    我用Claude 4拆解了Claude 4的系统提示词我用Claude 4拆解了Claude 4的系统提示词我用Claude 4拆解了Claude 4的系统提示词我用Claude 4拆解了Claude 4的系统提示词

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 近期Claude 4进行了升级,作为顶尖的AI编程模型,深入理解其工作原理对使用该模型非常有益。我看到了花叔分享的Claude 4系统提示词解析,确实很长,有些部分我没完全弄懂。于是我想,为什么…

    2026年10月5日 • 用户投稿
    100
  • 如何用Java实现接口签名校验 Java请求参数签名验证逻辑

    如何用Java实现接口签名校验 Java请求参数签名验证逻辑如何用Java实现接口签名校验 Java请求参数签名验证逻辑如何用Java实现接口签名校验 Java请求参数签名验证逻辑如何用Java实现接口签名校验 Java请求参数签名验证逻辑

    接口签名校验之所以重要,是因为它解决了数据篡改、身份伪造、重放攻击和未经授权访问等核心安全问题。1. 数据篡改:通过签名机制对请求参数进行哈希校验,任何参数被修改都会导致签名不一致,从而被服务器识别并拒绝;2. 身份伪造:客户端需持有合法密钥(appsecret)才能生成有效签名,确保请求来源的合法…

    2026年10月5日 • 用户投稿
    000
  • 10个 AI PPT 生成工具,ai轻松打造精美 PPT,2024 必备!

    10个 AI PPT 生成工具,ai轻松打造精美 PPT,2024 必备!10个 AI PPT 生成工具,ai轻松打造精美 PPT,2024 必备!10个 AI PPT 生成工具,ai轻松打造精美 PPT,2024 必备!10个 AI PPT 生成工具,ai轻松打造精美 PPT,2024 必备!

    PPT 是职场人士必备的技能,也是精英们用来打造优质项目的必备工具,现在借助 AI 的力量,制作精美的 PPT 将变得更加轻松。对于职场人来说,提高效率就意味着提升自我价值。今天苏米为大家整理了10款国内可用的 Ai PPT 在线生成工具,帮助你早日实现提前下班的愿望! ☞☞☞AI 智能聊天, 问答…

    2026年10月5日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信