Go 博客
Go 1.21 已发布!
今天,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 包用于对任何元素类型的切片执行常见操作。这包括排序函数,这些函数通常比 sort 包更快、更符合人体工程学。
- 新的 maps 包用于对任何键或元素类型的映射执行常见操作。
- 新的 cmp 包包含用于比较有序值的新实用程序。
性能提升
除了在启用 PGO 时性能提升之外
- Go 编译器本身已使用 PGO 重新构建,以用于 1.21,因此它构建 Go 程序的速度提高了 2-4%,具体取决于主机架构。
- 由于垃圾收集器进行了调整,一些应用程序的尾部延迟可能降低了 40%。
- 使用 runtime/trace 收集跟踪现在对 amd64 和 arm64 的 CPU 成本大大降低。
新的 WASI 端口
Go 1.21 添加了对 WebAssembly System Interface (WASI) 的实验性端口,预览版 1 (GOOS=wasip1
, GOARCH=wasm
)。
为了便于编写更通用的 WebAssembly (Wasm) 代码,编译器还支持用于从 Wasm 主机导入函数的新指令:go:wasmimport
。
感谢所有通过编写代码、提交错误报告、分享反馈和测试候选版本为本次发布做出贡献的人。你们的努力帮助确保 Go 1.21 尽可能稳定。与往常一样,如果您发现任何问题,请 提交问题。
尽情享受 Go 1.21!
下一篇文章:向后兼容性、Go 1.21 和 Go 2
上一篇文章:试验项目模板
博客索引