golang 1.22特性之for loop

背景

go1.22版本 for loop每轮循环都生成新的变量.

原谅: https://tip.golang.org/doc/go1.22

Previously, the variables declared by a "for" loop were created once and updated by each iteration. In Go 1.22, each iteration of the loop creates new variables, to avoid accidental sharing bugs. The transition support tooling described in the proposal continues to work in the same way it did in Go 1.21.

测试

接下来将使用同样的代码, 分别使用go1.21.4和go1.22.4版本来运行:

go 复制代码
package main

import (
	"fmt"
	"time"
)

func main() {
	for i := 0; i < 5; i++ {
		go func() {
			fmt.Println(i, &i)
		}()
	}
	time.Sleep(time.Second)
}

在我的mac 机器上, go1.21.4的运行结果(可能每次都不太一样):

复制代码
$ go run main.go
5 0x14000112008
5 0x14000112008
5 0x14000112008
3 0x14000112008
5 0x14000112008

使用go1.22.4运行的结果:

复制代码
$ go run main.go
0 0x14000110018
4 0x14000110038
3 0x14000110030
1 0x14000110020
2 0x14000110028

总结

go1.22版本对于for循环中的每个循环变量, 每轮循环都是都是使用新的变量.

相关推荐
Freak嵌入式3 分钟前
RP2040 PIO 编程模型与状态机原理:从硬件架构到工作逻辑全解析
java·大数据·开发语言·单片机·嵌入式硬件·硬件架构
kakawzw9 分钟前
Netty源码笔记
java·服务器·后端
明月_清风10 分钟前
算法时间复杂度:给小白的一堂"算快慢"课
后端·算法
Java小白笔记24 分钟前
Java中大数据实时归集与指标汇总方案
java·大数据·开发语言
Nturmoils25 分钟前
内网穿透原来这么简单:Natapp 从注册到公网访问完整教程
后端
随遇而安zx25 分钟前
【地基篇】---Java 8 JVM 知识大纲
java·开发语言·jvm
软件黑马王子35 分钟前
4.单例模式问题2:重复挂载
开发语言·单例模式·c#
quantdash_cc36 分钟前
批量请求和循环请求有什么区别?从 API 请求次数看量化数据获取的工程设计
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
寻求出路的程序媛38 分钟前
分布式 & 高性能 & 高可用 体系、学习重点、面试点
分布式·后端·面试·性能优化
SimonKing40 分钟前
GenOffice上手指南:免费替代Word+PPT+Excel的AI办公神器
java·后端·程序员