Go1.22 在for range 方面做了一些调整,主要分为两方面
1.不再共享循环变量
在 Go1.22 之前的版本 for range 生成的对象是单一的,如下代码:
func main() {
values := []int{1, 2, 3, 4, 5}
for _, value := range values {
go func() {
fmt.Printf("%p,%d\n", &value, value)
}()
}
time.Sleep(time.Second * 3)
}
Go 1.21.6 执行结果:
0xc00000a0d8,4
0xc00000a0d8,5
0xc00000a0d8,5
0xc00000a0d8,3
0xc00000a0d8,5
而在 Go 1.22.0中执行结果如下:
0xc00000a0f0,2
0xc00000a108,5
0xc00000a100,4
0xc00000a0d8,1
0xc00000a0f8,3
2. 支持循环整形类型
在 Go 1.22.0 中支持下方语法:
func main() {
for i := range 5 {
fmt.Println("Hello World!", i)
}
}
执行结果:
Hello World! 0
Hello World! 1
Hello World! 2
Hello World! 3
Hello World! 4
而在 Go 1.21.6 的版本中执行会报错
# command-line-arguments
.\main.go:18:17: cannot range over 5 (untyped int constant)
Compilation finished with exit code 1
标签:value,特性,range,Go1.22,0xc00000a0d8,Go,World,Hello
From: https://blog.csdn.net/Wksycxy/article/details/136770738