原文在这里

由 Dmitri Shuralyov 发布于 2024年8月13日

今天,Go 团队很高兴发布 Go 1.23 版本,你可以通过访问下载页面来获取它。

如果你已经在你的机器上安装了 Go 1.22 或 Go 1.21,你也可以在现有模块中尝试使用 go get toolchain@go1.23.0。这将下载新的工具链,并让你立即开始在模块中使用它。稍后,当你准备完全切换到 Go 1.23 并将其设置为模块的最低所需 Go 版本时,你可以继续使用 go get go@1.23.0。有关此功能的更多信息,请参阅Managing Go version module requirements with go get

Go 1.23 相比 Go 1.22 有许多改进。其中一些亮点包括:

语言层面的改变

  • “for-range”循环中的范围表达式现在可以是迭代函数,例如 func(func(K) bool)。这支持用户自定义的任意序列迭代器。slicesmap 包针对迭代器增加了一些新功能,以及一个新版的 iter 包。例如,如果希望将映射 m 的键收集到一个切片中,然后对它的值进行排序,你可以在 Go 1.23 中使用 slices.Sorted(maps.Keys(m)) 来完成。

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

有关语言变更迭代器的更多信息,请参阅发布说明。

工具提升

  • 从 Go 1.23 开始,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 个新包:iterstructsuniqueiter 包在前面已经提到。structs 包定义了标记类型,用于修改结构体的属性。unique 包提供了规范化(“内部化”)可比较值的设施。有关新标准库包的更多信息,请参阅发布说明。
  • 标准库的许多改进和新增功能都在库的次要更改部分中进行了概述。“Go, Backwards Compatibility, and GODEBUG” 文档列举了 Go 1.23 中新增的 GODEBUG 设置
  • Go 1.23 支持在 go.mod 和 go.work 文件中使用新的 godebug 指令,允许单独控制默认的 GODEBUG 值和 go.mod 的“go”指令,此外还支持两版之前(Go 1.21)提供的 //go:debug 指令注释。请参阅更新后的 Default GODEBUG Values文档。

更多提升和改变

  • Go 1.23 为 OpenBSD 在 64 位 RISC-V(openbsd/riscv64)上添加了实验性支持。有几个与 Linux、macOS、ARM64、RISC-V 和 WASI 相关的微小更改。有关ports的信息,请参阅发布说明。
  • 使用配置文件引导优化(PGO)时的构建时间有所减少,且在 386 和 amd64 架构上使用 PGO 的性能有所提升。有关运行时、编译器和链接器的更多信息,请参阅发布说明。

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

在未来几周内,请关注后续的博客文章,这些文章将更深入地探讨这里提到的某些主题,包括“range-over-func”(通过函数的range)、新的 unique 包、Go 1.23 定时器实现的变化等等。


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

享受 Go 1.23!


孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。

Author: mengbin

blog: mengbin

Github: mengbin92

cnblogs: 恋水无意

腾讯云开发者社区:孟斯特