Go1 21首个RC已发布。虽然这是Go1 21的第一个RC,但它的版本号却是go1
Go 1.21 首个 RC 已发布。
虽然这是 Go 1.21 的第一个 RC,但它的版本号却是
go1.21rc2
。因为开发团队在为 RC1 打上 tag 后就发现了一个 bug,所以他们马上基于该版本进行了修复并发布更新。(资料图)
Go 1.21 主要变化
改进工具链
配置文件引导优化 (PGO) 功能正式 GA。在 1.20 中处于预览阶段的启用配置文件引导优化 (PGO) 功能现已正式 GA。如果主软件包目录中存在名为default.pgo
的文件,go
命令将使用它来启用 PGO 构建。
Go 开发团队测试了 PGO 对多种 Go 程序的影响,发现性能提高了 2-7%。
更多详细信息查看 PGO 文档。
go
tool同时向前和向后兼容语法 语言变更
添加新的内置函数:min, max和clear 对泛型函数的类型推断进行了多项改进,包括扩展和解释清楚规范中类型推断的描述 在未来版本中,开发团队计划解决 Go 编程中最常见的问题之一:循环变量捕获 (loop variable capture)。Go 1.21 附带了此功能的预览版,目前可以使用环境变量在代码中启用该功能。 点此查看详情添加新的标准库
log/slog 包:用于结构化日志记录
slices 包:增用于对任何元素类型的切片进行常见操作,这个包比 sort 包更快、更符合人体工程学
maps包:用于对任何类型 key-value 进行常见操作
cmp 包:用于比较有序值 (ordered values)
优化性能
除了启用 PGO 时的性能改进之外:
Go 编译器本身已经在 1.21 中启用 PGO 进行了重建,因此它构建 Go 程序的速度提高了 2-4%,具体取决于主机架构 由于垃圾收集器的调整,某些应用程序的尾部延迟可能会减少高达 40% 现在使用runtime/trace收集跟踪在 amd64 和 arm64 上产生的 CPU 开销要小得多支持 WASI
Go 1.21 已实验性支持WebAssembly System Interface (WASI), Preview 1 (GOOS=wasip1
,GOARCH=wasm
)。
为了方便编写更通用的 WebAssembly (WASM) 代码,编译器还支持从 WASM 主机导入函数的新指令:go:wasmimport
。
详情查看发布公告。
延伸阅读
Go 开发团队讨论创建 math/rand/v2:引入新 API、标准库首个 v2 版本包