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循环中的每个循环变量, 每轮循环都是都是使用新的变量.

相关推荐
Laughtin几秒前
macos的python安装选择以及homebrew python的安装方法
开发语言·python·macos
默凉5 分钟前
C++ 编译过程
开发语言·c++
csbysj20207 分钟前
C 标准库 - `<errno.h>`
开发语言
Hx_Ma1612 分钟前
Springboot整合mybatis配置文件
spring boot·后端·mybatis
人道领域15 分钟前
Maven多模块开发:高效构建复杂项目
java·开发语言·spring boot·maven
FunW1n15 分钟前
TMF框架与Frida脚本相关疑问及核心解析提炼
开发语言·网络·python
ArturiaZ15 分钟前
【day28】
开发语言·c++·算法
UIUV33 分钟前
构建Git AI提交助手:从零到全栈实现的学习笔记
前端·后端·typescript
小灵不想卷35 分钟前
LangChain4j 与 SpringBoot 整合
java·后端·langchain4j