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

相关推荐
左右用AI4 小时前
每周1亿次下载的axios被投毒了,但是源码里没有一行恶意代码!
前端·后端
SimonKing4 小时前
IDEA 2026.1重磅发布:AI智能体全面开放,编程进入“万能插座”时代
java·后端·程序员
星浩AI4 小时前
刚刚,Claude Code 的源码泄露了
后端·github·ai编程
元俭4 小时前
【Eino 框架入门】Callback 可观测性:给 Agent 装个"监控摄像头"
后端
我叫黑大帅4 小时前
如何使用PHP创建图像验证码
后端·面试·php
何中应4 小时前
Wiki搭建
后端·开源软件·wiki
老虎06274 小时前
数据结构09(Java)-- 二分查找模板
java·开发语言·数据结构
蓝天星空4 小时前
C#中for循环和foreach循环的区别
开发语言·c#
AI茶水间管理员4 小时前
手动执行 Claude 压缩上下文后,到底保留了什么?(附Vibe Coding 案例)
人工智能·后端
傻啦嘿哟4 小时前
如何使用 Python 操作 Excel 图片:插入、提取与压缩
开发语言·python·excel