Go 1.22 至 1.26: 真正重要的变化
为什么这篇文章同时涵盖四个次要版本 Go 每六个月发布一次。连续阅读四套发布说明不是任何人想要度过下午的方式。但如果你在生产环境中运行 Go,你需要知道发生了什么变化。 本文涵盖 Go 1.22 到 Go 1.26 — 2024 年初到 2026 年初发布的版本。这是两年的语言演进,放在一篇文章里。 Go 1.22: For 循环改变了一切 2024 年 2 月。Go 1.22 中最有影响力的变化不是新包或编译器优化。而是修复了 for 循环处理变量的方式。 在 Go 1.22 之前,这段代码有一个微妙的 bug: var funcs []func() for i := range 10 { funcs = append(funcs, func() { fmt.Println(i) }) } for _, f := range funcs { f() // 打印 9 次 9,而不是 0-9 } 每个闭包捕获相同的变量 i。当你调用这些函数时,i 是 9。每个 Go 开发者至少踩过这个坑一次。 Go 1.22 改变了这一点。 每次循环迭代现在都创建新变量。闭包捕获不同的变量。代码的行为符合你的预期 — 打印 0 到 9。 Go 团队提供了过渡工具,以便你可以检测依赖于旧行为的代码。go vet 可以捕获该模式。但修复本身很干净:如果你的代码看起来正确,它很可能就是正确的。 ...