Go 博客

Go 1.23 发布

Dmitri Shuralyov,代表 Go 团队
2024 年 8 月 13 日

今天,Go 团队很高兴发布 Go 1.23,您可以访问 下载页面 获取该版本。

如果您已经在机器上安装了 Go 1.22 或 Go 1.21,您也可以尝试在现有模块中使用 go get [email protected]。这将下载新的工具链,并让您立即开始在模块中使用它。稍后,您可以按照 go get [email protected] 操作,当您准备完全切换到 Go 1.23 并将其设置为模块的最低要求的 Go 版本时。有关此功能的更多信息,请参阅 使用 go get 管理 Go 版本模块要求

Go 1.23 包含了许多比 Go 1.22 更好的改进。以下是一些亮点

语言变更

  • “for-range” 循环中的范围表达式现在可以是迭代器函数,例如 func(func(K) bool)。这支持对任意序列的用户定义迭代器。标准的 slicesmaps 包中有几个与迭代器一起使用的补充,以及一个新的 iter 包。例如,如果您希望将映射 m 的键收集到一个切片中,然后对它的值进行排序,您可以在 Go 1.23 中使用 slices.Sorted(maps.Keys(m)) 来实现这一点。

    Go 1.23 还包括对泛型类型别名的预览支持。

    在发行说明中阅读有关 语言变更迭代器 的更多信息。

工具改进

  • 从 Go 1.23 开始,Go 工具链可以收集使用情况和故障统计信息,以帮助了解 Go 工具链的使用方式以及它的运行情况。这是 Go 遥测,一个选择加入系统。请考虑选择加入,以帮助我们保持 Go 的良好运行并更好地了解 Go 的使用情况。在发行说明中阅读有关 Go 遥测 的更多信息。
  • go 命令具有新的便利性。例如,运行 go env -changed 可以更轻松地查看哪些设置的有效值不同于默认值,而 go mod tidy -diff 有助于确定对 go.mod 和 go.sum 文件的必要更改,而无需修改它们。在发行说明中阅读有关 Go 命令 的更多信息。
  • go vet 子命令现在报告对于目标 Go 版本而言过新的符号。在发行说明中阅读有关 工具 的更多信息。

标准库改进

  • Go 1.23 改进了 time.Timertime.Ticker 的实现。在发行说明中阅读有关 计时器更改 的更多信息。
  • Go 1.23 标准库中总共有 3 个新包:iterstructsunique。上面提到了 iter 包。structs 包定义了标记类型以修改结构的属性。unique 包提供了对可比较值进行规范化(“内部化”)的设施。在发行说明中阅读有关 新的标准库包 的更多信息。
  • 发行说明的 对库的次要更改 部分列出了标准库中的许多改进和补充。“Go、向后兼容性和 GODEBUG” 文档列出了 Go 1.23 中新增加的 GODEBUG 设置
  • Go 1.23 支持 go.modgo.work 文件中新的 godebug 指令,允许单独控制默认 GODEBUG 和 go.mod 的“go”指令,此外还有两个版本前(Go 1.21)提供的 //go:debug 指令注释。查看有关 默认 GODEBUG 值 的更新文档。

更多改进和变更

  • Go 1.23 为 64 位 RISC-V 上的 OpenBSD(openbsd/riscv64)添加了实验性支持。对 Linux、macOS、ARM64、RISC-V 和 WASI 有几个与之相关的次要更改。在发行说明中阅读有关 移植 的更多信息。
  • 使用 profile-guided optimization (PGO) 时的构建时间减少了,并且在 386 和 amd64 架构上使用 PGO 的性能得到了提高。在发行说明中阅读有关 运行时、编译器和链接器 的更多信息。

我们鼓励每个人阅读 Go 1.23 发行说明,以获取有关这些更改的完整详细信息,以及 Go 1.23 中所有其他新功能。

在接下来的几周内,请关注后续博客文章,这些文章将更深入地介绍这里提到的一些主题,包括“范围遍历函数”、新的 unique 包、Go 1.23 计时器实现更改等等。


感谢所有通过编写代码和文档、报告错误、分享反馈和测试候选版本来为本版本做出贡献的人。您的努力帮助确保 Go 1.23 尽可能稳定。与往常一样,如果您发现任何问题,请 提交问题

享受 Go 1.23!

下一篇文章:范围遍历函数类型
上一篇文章:Go 1.22 中的安全随机数
博客索引