Go 1.22 版本于 2024 年 2 月 6 日正式向世界宣告了版本的发布 。
我们可以从官网下载1.22版本进行体验,或者从 Go Playground上进行体验最新语法
图片
值得注意的是在语言层面上,这个版本对 for 循环进行了两处更新:
- • for循环的每次迭代都会定义新变量,而不再是共享一个变量
- • 支持对整数范围进行循环迭代
今天将以案例的方式对比下最新版本 for 循环的两个更新点。
🧐 Let's Go!
循环不再共享循环变量
🔔 for在循环语义层面的坑
Go1.22之前版本for 循环声明的变量只创建一次,并在每次迭代中进行更新,这会导致遍历时访问value时实际上都是访问的同一个地址的值。
相信不少小伙伴都遇到过,特别是在初学Go的时候!
Go1.22之前版本
我们用官博文章中那个例子,稍微改进如下,并使用1.21版本运行
package main
import "fmt"
func main() {
done := make(chan bool)
values := []string{"xiao", "xu", "code"}
for _, v := range values {
go func() {
fmt.Println(v)
done