Go1.22 正式发布!包含语言变化、性能提高、标准库变动等重要特性
大家好,我是煎鱼。今天 Go1.22 正式发布了!一早起来,还没出门就赶紧整理了本篇文章给大家。一起学习新版本!之前我还看进度预测 2 月中发布。没想到直接打脸。Go 核心团队成功赶在春节前发布了!真是有点猛。Go 1.22 新版本安装方式:Go1.22 包含多项重要的新功能和改进。以下是部分显著变化;完整列表请查看《Go 1.22 Release Notes[1]》。欢迎大家一起学习新版本特性和
大家好,我是煎鱼。
今天 Go1.22 正式发布了!
一早起来,还没出门就赶紧整理了本篇文章给大家。一起学习新版本!
之前我还看进度预测 2 月中发布。没想到直接打脸。Go 核心团队成功赶在春节前发布了!真是有点猛。
Go 1.22 新版本安装方式:
Go1.22 包含多项重要的新功能和改进。以下是部分显著变化;完整列表请查看《Go 1.22 Release Notes[1]》。
欢迎大家一起学习新版本特性和内容!
官方概述
语言变化
长期存在的 "for "循环在迭代之间意外共享循环变量的问题现已得到解决。
从 Go 1.22 开始,以下代码将按一定顺序打印 "a"、"b "和 "c":
func main() {
done := make(chan bool)
values := []string{"a", "b", "c"}
for _, v := range values {
go func() {
fmt.Println(v)
done <- true
}()
}
// wait for all goroutines to complete before exiting
for _ = range values {
<-done
}
}
有关这一变更以及有助于防止代码意外中断的工具的更多信息,请参阅之前的《Fixing For Loops in Go 1.22[2]》。
第二个语言变化是支持整数范围:
package main
import "fmt"
func main() {
for i := range 10 {
fmt.Println(10 - i)
}
fmt.Println("go1.22 has lift-off!")
}
第二个语言变化是支持整数范围:a 在这个倒计时程序中,i 的取值范围为 0 至 9(含 9)。
性能提高
Go 运行时中的内存优化可将 CPU 性能提高 1-3%,同时还可将大多数 Go 程序的内存开销减少约 1%。
在 Go 1.21 中,我们为 Go 编译器提供了配置文件引导优化 (PGO),而且这一功能还在不断改进。
Go 1.22 中新增的优化之一是改进了虚拟化,允许静态调度更多的接口方法调用。启用 PGO 后,大多数程序的性能将提高 2% 至 14%。
标准库变动
新的 math/rand/v2 软件包提供了更简洁、更一致的应用程序接口,并使用了质量更高、速度更快的伪随机生成算法。
net/http.ServeMux
使用的模式现在可接受方法和通配符。例如:路由器接受
GET /task/{id}/
这样的模式,该模式只匹配 GET 请求,并在一个可通过 Request 值访问的映射中捕获 {id} 段的值。
database/sql 包中新增了
Null[T]
类型,为扫描可为空的列提供了一种方法。在 slices 包中添加了 Concat 函数,用于连接任意类型的多个片段。
详细解读 Go1.22 特性
参考资料
[1]
Go 1.22 Release Notes: https://tip.golang.org/doc/go1.22
[2]Fixing For Loops in Go 1.22: https://go.dev/blog/loopvar-preview
关注和加煎鱼微信,
一手消息和知识,拉你进技术交流群👇
你好,我是煎鱼,出版过 Go 畅销书《Go 语言编程之旅》,再到获得 GOP(Go 领域最有观点专家)荣誉,点击蓝字查看我的出书之路。
日常分享高质量文章,输出 Go 面试、工作经验、架构设计,加微信拉读者交流群,和大家交流!
原创不易 点赞支持
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)