Go 博客
Go 1.23 发布
今天,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)
。这支持对任意序列的用户定义迭代器。标准的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
包提供了对可比较值进行规范化(“内部化”)的设施。在发行说明中阅读有关 新的标准库包 的更多信息。 - 发行说明的 对库的次要更改 部分列出了标准库中的许多改进和补充。“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 有几个与之相关的次要更改。在发行说明中阅读有关 移植 的更多信息。 - 使用 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 中的安全随机数
博客索引