Go1.21 RC 发布了!!!
2023-6-26 08:53:41 Author: Go语言中文网(查看原文) 阅读量:25 收藏

阅读本文大概需要 2 分钟。

大家好,我是站长 polarisxu。

不要怀疑,为什么没见到 RC1,直接 RC2 了?因为打完 go1.21rc1 后发现了一个 bug,然后修复了,所以直接发布 RC2。(实际上 go 仓库是能看到 RC1 tag 的)

Go 1.21 包含了许多新功能和改进。获取 RC (发布候选版本) 可以让你提前尝试它,用它来处理你的工作,并在最终发布之前 (预定于 8 月) 报告任何问题。以下是 Go 1.21 的一些值得注意的变化和功能;完整的列表,请参考完整的发布说明[1]

工具改进

  • 我们在 1.20 中预览的配置文件引导优化 (PGO) 功能现在已经可用!如果主包的目录中存在一个名为 default.pgo 的文件,go 命令将使用它来启用 PGO 构建。更多细节请参考 PGO 文档[2]。我们已经测试了 PGO 对一系列 Go 程序的影响,看到了 2-7% 的性能提升。

  • go 工具现在支持向后和向前的语言兼容性。

语言变化

  • 新的内置函数:min、max 和 clear。之前有写文章介绍过。
  • 对泛型函数的类型推断进行了多项改进。规范中对类型推断的描述已经扩展和澄清[3]
  • 在 Go 的未来版本中,我们计划解决 Go 编程中最常见的陷阱之一:循环变量捕获[4]。Go 1.21 带来了这个功能的预览,你可以通过一个环境变量在你的代码中启用它。更多细节请参考 LoopvarExperiment wiki[5] 页面。

标准库添加

  • 新的 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),Preview 1 (GOOS=wasip1, GOARCH=wasm)。

为了方便编写更通用的 WebAssembly (WASM) 代码,编译器还支持了一种新的指令,用于从 WASM 主机导入函数:go:wasmimport。

因为是预览版本,建议采用官方推荐的方式安装试用。

参考资料

[1]

请参考完整的发布说明: https://tip.golang.org/doc/go1.21

[2]

参考 PGO 文档: https://go.dev/doc/pgo

[3]

规范中对类型推断的描述已经扩展和澄清: https://tip.golang.org/ref/spec#Type_inference

[4]

循环变量捕获: https://go.dev/wiki/CommonMistakes

[5]

LoopvarExperiment wiki: https://go.dev/wiki/LoopvarExperiment


往期推荐

我是 polarisxu,北大硕士毕业,曾在 360 等知名互联网公司工作,10多年技术研发与架构经验!2012 年接触 Go 语言并创建了 Go 语言中文网!著有《Go语言编程之旅》、开源图书《Go语言标准库》等。

坚持输出技术(包括 Go、Rust 等技术)、职场心得和创业感悟!欢迎关注「polarisxu」一起成长!也欢迎加我微信好友交流:gopherstudio


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMTA4Njc0OQ==&mid=2651454480&idx=1&sn=46aedd86cba90b2d3f62457397fa79a4&chksm=80bb22e2b7ccabf487a1d56ca1826c9f0cb287066c8346bc4bb05f3c4e9b22baa41bb2aeb3b2#rd
如有侵权请联系:admin#unsafe.sh