Go 1.22:Golang历史上最大的破坏向后兼容性版本
2024-02-15推荐
Go历史上最大的破坏向后兼容性的版本。 发布说明甚至没有提到 Go 1.22 会破坏向后兼容性这一事实。
网友观点:
部分破坏,这取决于为每个引用
模块
设置的 go.mod 版本。这样做比较温和,但如果任何模块提高了版本,可能会产生负面影响。
要使这一更改具有破坏性,需要将 go.mod 更新到 1.22 版,因此您显然选择了接受这一更改。你也可以说,在大多数情况下,新行为都是我们所希望的,它所修复的问题可能比它带来的问题更多。 这是一个很好的改动。
1.22版本发布
最新的 Go 版本 1.22 在Go 1.21发布六个月后发布。它的大部分变化在于工具链、运行时和库的实现。与往常一样,该版本保持了 Go 1的兼容性承诺?我们期望几乎所有 Go 程序都能像以前一样继续编译和运行。
语言的变化
Go 1.22 对「for」循环进行了两处更改。
Go 1.22 包括我们正在考虑为 Go 的未来版本进行的语言更改的预览:范围函数迭代器。构建GOEXPERIMENT=rangefunc可以启用此功能。
工具的变化
执行命令
跟踪
vet工具
运行变化:
运行时使基于类型的垃圾收集元
数据
更接近每个堆对象,从而将 Go 程序的 CPU
性能
(延迟或吞吐量)提高了 1-3%。
编译器:
配置文件引导优化 (PGO)构建现在可以比以前实现更高比例的调用去虚拟化。
编译器现在交错去虚拟化和内联,因此接口方法调用得到了更好的优化。
Go 1.22 还包括编译器内联阶段的增强实现的预览,该阶段使用启发式方法来提高被认为「重要」的调用站点(例如,循环中)的内联性,并阻止被认为「不重要」的调用站点(例如,在循环中)的内联。恐慌路径)。
链接器:
linker的 -s 和-w标志现在在所有平台上的行为更加一致。
-w标志抑制 DWARF 调试信息生成。
-s标志抑制符号表生成。
引导程序
正如Go 1.20 发行说明中提到的,Go 1.22 现在需要 Go 1.20 或更高版本的最终版本进行引导。我们预计 Go 1.24 将需要 Go 1.22 或更高版本的最终版本进行引导。
核心库
新的 math/rand/v2 包
新的go/version包
增强的路由
模式
:使用的模式net/http.ServeMux已得到增强,可以接受方法和通配符。
Go 1.22:Golang历史上最大的破坏向后兼容性版本 - 极道