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

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

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

背景

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

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

先来简单回顾下使用使用 for 循环会碰到的问题:16S28资讯网——每日最新资讯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。16S28资讯网——每日最新资讯28at.com

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

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

当然在现阶段要解决也很简单,要么就是在使用之前先复制一次,或者使用闭包传参:16S28资讯网——每日最新资讯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)   }

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

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

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



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

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

❯ GOEXPERIMENT=loopvar go testname=bname=a

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

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

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

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

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

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

标签:
  • 热门焦点
  • 帅气纯真少年!日本最帅初中生选美冠军出炉

    日本第一帅哥初一生选美大赛冠军现已正式出炉,冠军是来自千叶县的宗田悠良。日本一直热衷于各种选美大赛,从“最美JK”起到“最美女星&r
  • 把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 8月见!小米MIX Fold 3获得3C认证:支持67W快充

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 三星电子Q2营收60万亿韩元 存储业务营收同比仍下滑超过50%

    7月27日消息,据外媒报道,从三星电子所发布的财报来看,他们主要利润来源的存储芯片业务在今年二季度仍不乐观,营收同比仍在大幅下滑,所在的设备解决方案
  • iQOO 11S新品发布会

    iQOO将在7月4日19:00举行新品发布会,推出杭州亚运会电竞赛事官方用机iQOO 11S。
Top