今天,Go 团队非常兴奋地发布了 Go 1.21 版本,你可以通过访问下载页面获取它。
Go 1.21 包括了大量新的特性和改进。这里列出了一些显著的变化;要获取完整列表,请参阅发布说明。
### 工具改进
- 我们在 1.20 中宣布预览的 PROFILE GUIDED OPTIMIZATION (PGO) 特性现在正式可用了!如果主包目录中存在一个名为 default.pgo 的文件,go 命令将使用它来启用 PGO 构建。参见 PGO 文档以获取更多详细信息。我们对大量 Go 程序测量了 PGO 的影响,性能提升在 2-7%之间。
- go 工具现在支持向后和向前的语言兼容性。
### 语言变化
- 新增内置函数:min、max 和 clear。
- 对泛型函数的类型推导进行了几项改进。规范中类型推导的描述已经扩展和澄清。
- 在未来的 Go 版本中,我们计划解决 Go 编程中最常见的陷阱之一:循环变量捕获。Go 1.21 带有该特性的预览,你可以使用环境变量在代码中启用它。参见 LoopvarExperiment wiki 页面以获取更多详细信息。
### 标准库新增
- 新增 log/slog 包,用于结构化日志记录。
- 新增 slices 包,用于对任意元素类型的 slice 执行常见操作。这包括通常比 sort 包更快更符合人体工程学的排序函数。
-新增 maps 包,用于对任意键和元素类型的 map 执行常见操作。
-新增 cmp 包,提供比较有序值的新实用程序。
### 性能改进
除了启用 PGO 时的性能改进:
- Go 编译器本身已经使用 PGO 重新构建了 1.21 版本,因此它根据主机架构的不同,构建 Go 程序的速度提升了 2-4%。
- 由于垃圾回收器的调优,一些应用程序的尾延迟可能会减少高达 40%。
- 使用 runtime/trace 收集跟踪信息现在在 amd64 和 arm64 上的 CPU 开销大大降低。
### 新增对 WASI 的支持
Go 1.21 增加了对 WebAssembly 系统接口 (WASI) 预览 1 (GOOS=wasip1,GOARCH=wasm)的实验性支持。
为方便编写更通用的 WebAssembly (Wasm) 代码,编译器还支持一个新的指令来从 Wasm 主机导入函数:go:wasmimport。
有疑问加站长微信联系(非本文作者))