Go 1.24发布 带来性能改进和更好的WebAssembly支持
Go 1.24 由 Google 工程师于本周发布,是这一流行编程语言向前迈出的最新一步。Go 1.24 提供了各种性能改进、对 Go 编程语言通用类型别名的全面支持、各种 Go 工具改进、促进 FIPS 140-3 合规性的标准库添加、标准库中的"os.Root"类型,以及改进的 WebAssembly 支持。
说到 Go 1.24 的性能工作,在各种代表性基准测试中,运行时 CPU 开销平均降低了 2%~3%。Go 1.24 对 WebAssembly 的改进包括新的"go:was"和"go:was"。
Go 1.24 与 Go 1.23 相比有许多改进。 以下是一些显著的变更;如需完整列表,请参阅 发行说明。
语言变更
Go 1.24 现在完全支持通用类型别名:类型别名可以像已定义的类型一样被参数化。 详情请参见语言规范。
性能改进
运行时的多项性能改进使 CPU 开销在一系列代表性基准测试中平均降低了 2-3%。 这些改进包括基于 Swiss Tables 的新内置 map
实现、更高效的小对象内存分配以及新的运行时内部互斥实现。
工具改进
go
命令现在提供了一种跟踪模块工具依赖性的机制。 使用go get -tool
将tool
指令添加到当前模块。 使用go tool [tool name]
运行使用tool
指令声明的工具。 在发行说明中阅读更多关于 go 命令的内容。test
子命令go vet
中的新test
分析器可报告测试包中测试、模糊器、基准和示例声明中的常见错误。 在发行说明中阅读更多关于 vet 的内容。
标准库新增内容
标准库现在包括一套新的机制,以促进 FIPS 140-3 合规性。 应用程序无需修改源代码即可使用已获批准算法的新机制。 有关 FIPS 140-3 合规性的更多信息,请参阅发布说明。 除 FIPS 140 外,x/crypto 模块中的多个软件包现在也可在 标准库中使用。
基准现在可以使用更快、更不易出错的
testing.B.Loop
方法来执行基准迭代,如for b.Loop() { ... }
来代替涉及b.N
的典型循环结构,如for range b.N
。 有关 新基准函数的更多信息,请参阅发行说明。新的
os.Root
类型提供了在特定目录下执行文件系统隔离操作的能力。 请阅读发行说明中有关文件系统访问的更多信息。运行时提供了一种新的终结机制,
runtime.AddCleanup
比runtime.SetFinalizer
更灵活、更高效、更不易出错。 有关 清理的更多信息,请参阅发行说明。
改进对 WebAssembly 的支持
Go 1.24 新增了 go:wasmexport
指令,用于 Go 程序向 WebAssembly 主机导出函数,并支持将 Go 程序作为 WASI reactor/library 构建。 请阅读 WebAssembly 发行说明中的更多信息。
有关本周发布的 Go 1.24 的下载和更多信息,请访问 Go.dev.