Go 官方博客
Go 1.23 已发布
今天 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
。有关此功能的更多信息,请参阅使用 go get 管理 Go 版本模块要求。
Go 1.23 相对于 Go 1.22 有许多改进。一些亮点包括
语言变更
-
“for-range” 循环中的范围表达式现在可以是迭代器函数,例如
func(func(K) bool)
。这支持用户定义对任意序列的迭代器。标准库中的slices
和maps
包增加了几个与迭代器一起使用的功能,还有一个新的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.Timer
和time.Ticker
的实现。在发布说明中阅读更多关于计时器变更的信息。 - Go 1.23 标准库中共有 3 个新包:
iter
、structs
和unique
。上面已提到iter
包。structs
包定义了标记类型来修改结构体的属性。unique
包提供了规范化(“interning”)可比较值的功能。在发布说明中阅读更多关于新的标准库包的信息。 - 发布说明的库的次要变更部分列出了标准库的许多改进和新增内容。“Go、向后兼容性和 GODEBUG”文档列出了Go 1.23 新增的 GODEBUG 设置。
- Go 1.23 支持在
go.mod
和go.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 相关的次要变更。在发布说明中阅读更多关于移植的信息。 - 使用配置文件引导优化 (PGO) 时,构建时间减少,并且在 386 和 amd64 架构上使用 PGO 的性能得到提升。在发布说明中阅读更多关于运行时、编译器和链接器的信息。
我们鼓励大家阅读Go 1.23 发布说明,以获取有关这些变更以及 Go 1.23 所有新功能的完整详细信息。
在接下来的几周里,请关注后续博客文章,它们将更深入地探讨此处提到的一些主题,包括“range-over-func”、新的 unique
包、Go 1.23 计时器实现变更等。
感谢所有为本次发布做出贡献的人,他们编写了代码和文档、报告了错误、分享了反馈并测试了发布候选版本。大家的努力确保了 Go 1.23 的稳定性尽可能高。一如既往,如果您发现任何问题,请提交问题。
尽情享受 Go 1.23 吧!
下一篇文章:对函数类型进行范围遍历
上一篇文章:Go 1.22 中的安全随机性
博客索引