golang 1.22
wswssx
我是一个很有爱心和耐心的人
展开
-
loopvar 改动不同版本的影响-并发
这个代码定义了一个isGold 的func,可以被65536整除的就是gold,然后定义了一个uint64的channel,接着开了5个go routine,每个go routine都是一个不会停止的协程,加锁i进行自增,并把自增后的i复制给v,如果v可以被65536整除,那么把v放到uint64的channel中,最后打印出channel的值。如果代码写的不好,并发的时候是很容易出现data race的,运行的时候加上-race这个参数。原创 2024-04-09 11:29:52 · 403 阅读 · 0 评论 -
loopvar 改动不同版本的影响-defer,closures
这个代码先打印了使用的golang的版本,然后进行一个for循环,for循环中定义了一个defer func,打印出循环时定义的变量counter的值,在counter自增原创 2024-04-08 19:30:10 · 422 阅读 · 0 评论 -
loopvar 改动不同版本的影响-大循环的执行时间
代码说明代码定义foo方法,循环了一个长度有4k的slice,readonly是一个空方法,只是为了演示用的,bench为计算循环执行时长的方法可以看到在golang 1.21.5的版本中执行的时间是1.2us,在1.22中执行时间是会变长还是变短呢?是不是很吃惊,1.22居然用了784us,比1.21的执行时间要长了很多倍。golang 1.21的结果golang 1.22的结果单次运行的结果发现1.21和1.22的消耗的时间是差不多的。为什么第一个例子中1.22执行的时间长,1.21执原创 2024-04-02 19:04:41 · 488 阅读 · 0 评论 -
loopvar 改动不同版本的影响-基础循环
出现上述问题的原因是1.22 loopvar的规则变了,1.22之前的版本中for循环中的变量只会循环一次,不论需要循环多少次都只初始化一次,但是1.22中变成了每次循环逗号创建新变量,以避免意外共享bug。这个代码先打印了使用的golang的版本,然后进行一个for循环,for循环中打印了变量i的地址。可以看到在1.21.5这个版本中,打印出来的地址都是一样的,在1.22中又会如何呢。可以看到在1.22.1的这个版本中,打印出来的地址都是不一样的。在1.22的版本中的结果。原创 2024-03-28 13:06:20 · 366 阅读 · 0 评论 -
golang 1.22 新特性概览
影响最大的就是loopvar的语义修正。原创 2024-03-27 15:30:49 · 865 阅读 · 0 评论