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

相关推荐
Tzarevich几秒前
Agent记忆模块:让大模型“记住”你,还能省Token!
后端·langchain·agent
窝子面几秒前
LeetCode练题一:async 和await 和 promise
开发语言·前端·javascript
qq_334903151 分钟前
编译器内建函数使用
开发语言·c++·算法
baizhigangqw2 分钟前
SpringBoot中整合ONLYOFFICE在线编辑
java·spring boot·后端
pangares3 分钟前
Spring Boot文件上传
java·spring boot·后端
阿贵---4 分钟前
C++中的中介者模式
开发语言·c++·算法
大黄说说4 分钟前
RESTful API vs GraphQL:设计哲学、性能博弈与选型指南
后端·restful·graphql
想你的液宝6 分钟前
运单更改单字段对比与追溯系统设计与实现
后端·程序员
AsDuang6 分钟前
Python 3.12 MagicMethods - 56 - __and__
开发语言·python
1candobetter6 分钟前
JAVA后端开发——如何在多层代理环境下实现稳定的签名算法:Host 与端口问题解析
java·开发语言