Go 博客

Go 1.19 发布了!

Go 团队
2022 年 8 月 2 日

今天,Go 团队非常高兴地发布 Go 1.19,您可以访问下载页面获取。

Go 1.19 完善并改进了我们今年早些时候发布的庞大Go 1.18 版本。我们将 Go 1.19 的泛型开发重点放在解决社区报告的细微问题和极端情况,以及重要的性能改进(某些泛型程序的性能提升高达 20%)。

文档注释现在支持链接、列表和更清晰的标题语法。此更改有助于用户编写更清晰、更易于导航的文档注释,尤其是在具有大型 API 的包中。作为此更改的一部分,gofmt 现在会重新格式化文档注释,以便对这些功能的使用应用标准格式。有关所有详细信息,请参阅“Go 文档注释”。

Go 的内存模型现在明确定义了sync/atomic 包的行为。对 happens-before 关系的正式定义已修订,使其与 C、C++、Java、JavaScript、Rust 和 Swift 使用的内存模型保持一致。现有程序不受影响。除了内存模型更新之外,sync/atomic 包中还有一些新类型,例如atomic.Int64atomic.Pointer[T],以便于使用原子值。

出于安全原因,os/exec 包不再尊重 PATH 查找中的相对路径。有关详细信息,请参阅包文档。现有使用golang.org/x/sys/execabs的程序,如果仅使用 Go 1.19 或更高版本构建,则可以迁移回 os/exec。

垃圾回收器添加了对软内存限制的支持,在新的垃圾回收指南中进行了详细讨论。对于优化 Go 程序以在具有专用内存量的容器中尽可能高效地运行,此限制特别有用。

新的构建约束unix在目标操作系统 (GOOS) 为任何类 Unix 系统时满足。如今,类 Unix 指的是除jsplan9windowszos 之外的所有 Go 目标操作系统。

最后,Go 1.19 包括各种性能和实现改进,包括动态调整初始 goroutine 栈的大小以减少栈复制、在大多数 Unix 系统上自动使用其他文件描述符、针对 x86-64 和 ARM64 上的大型 switch 语句使用跳转表、对 ARM64 上的调试器注入函数调用提供支持、对 RISC-V 上的寄存器 ABI 提供支持,以及对在龙芯 64 位架构龙架构 (GOARCH=loong64) 上运行的 Linux 提供实验性支持。

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

享受 Go 1.19!

下一篇文章:Go 的漏洞管理
上一篇文章:分享您对使用 Go 进行开发的反馈
博客索引