当前位置:首页 > 科技  > 软件

Go 语言史诗级更新-循环Bug修复

来源: 责编: 时间:2023-09-25 10:38:09 443观看
导读背景前两天 Golang 的官方博客更新了一篇文章:Fixing For Loops in Go 1.22看这个标题的就是修复了 Go 循环的 bug,这真的是史诗级的更新;我身边接触到的大部分 Go 开发者都犯过这样的错误,包括我自己,所以前两年我也写过

背景

前两天 Golang 的官方博客更新了一篇文章:Fixing For Loops in Go 1.22icH28资讯网——每日最新资讯28at.com

看这个标题的就是修复了 Go 循环的 bug,这真的是史诗级的更新;我身边接触到的大部分 Go 开发者都犯过这样的错误,包括我自己,所以前两年我也写过类似的博客:简单的 for 循环也会踩的坑icH28资讯网——每日最新资讯28at.com

先来简单回顾下使用使用 for 循环会碰到的问题:icH28资讯网——每日最新资讯28at.com

list := []*Demo{{"a"}, {"b"}}  for _, v := range list {   go func() {    fmt.Println("name="+v.Name)   }()  }    type Demo struct {   Name string  }

预期的结果应该是打印 a,b,但实际打印的却是b,b。icH28资讯网——每日最新资讯28at.com

图片图片icH28资讯网——每日最新资讯28at.com

Let's Encrypt: CAA Rechecking bug类似的问题连 mozilla 团队也没能幸免,所以也确实是一个非常常见的问题,这样的写法符合大部分的开发者的直觉,毕竟其他语言这么使用也没有问题。icH28资讯网——每日最新资讯28at.com

当然在现阶段要解决也很简单,要么就是在使用之前先复制一次,或者使用闭包传参:icH28资讯网——每日最新资讯28at.com

// 复制 list := []*Demo{{"a"}, {"b"}}   for _, v := range list {    temp:=v    go func() {     fmt.Println("name="+temp.Name)    }()   } // 闭包 list := []*Demo{{"a"}, {"b"}}   for _, v := range list {    go func(temp *Demo) {     fmt.Println("name="+temp.Name)    }(v)   }

还好官方也意识到了这个问题:icH28资讯网——每日最新资讯28at.com

图片图片icH28资讯网——每日最新资讯28at.com

所以在 1.22 中我们可以不用再写这个 



v:=v这个多余的复制语句了,也不会出现上面的问题。icH28资讯网——每日最新资讯28at.com

我们在 1.21 中可以使用环境变量预览这个特性:icH28资讯网——每日最新资讯28at.com

❯ GOEXPERIMENT=loopvar go testname=bname=a

在 1.22 发布后建议大家都可以升级了,将这种恶心的 bug 扼杀在摇篮里。icH28资讯网——每日最新资讯28at.com

1.22 后带来了一个好消息是今后少了一道面试题,坏消息是又新增了一个 1.22 版本带来了哪些变化的面试题

本文链接:http://www.28at.com/showinfo-26-11246-0.htmlGo 语言史诗级更新-循环Bug修复

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 不可变模式篇:非常抓狂,这特么到底是哪里不对?

下一篇: 高并发下就该使用非阻塞式方式接口调用提高系统整体性能

标签:
  • 热门焦点
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 小米汽车电池信息疑似曝光:容量101kWh,支持800V高压快充

    7月14日消息,今日一名博主在社交媒体发布了一张疑似小米汽车电池信息的照片,显示该电池包正是宁德时代麒麟电池,容量为101kWh,电压为726.7V,可以预测小
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 半导体需求下滑 三星电子DS业务部门今年营业亏损预计超10万亿韩元

    7月17日消息,据外媒报道,去年下半年开始的半导体需求下滑,影响到了三星电子、SK海力士、英特尔等诸多厂商,营收明显下滑,部分厂商甚至出现了亏损。作为
  • OPPO K11采用全方位护眼屏:三大护眼能力减轻视觉疲劳

    日前OPPO官方宣布,全新的OPPO K11将于7月25日正式发布,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼IMX890主摄,堪称是2000档位影像表
Top