Go 1.19改进了泛型和内存模型
Go 1.19完善了Go 1.18中引入的泛型支持,并将泛型代码的性能提高了20%。
谷歌的Go(Golang)编程语言的最新版本Go 1.19已经达到生产可用性。这次更新改进了最近增加的泛型,并首次推出了一个增强的内存模型。
在8月2日发布的Go 1.19中,泛型开发的重点是解决社区报告的微妙问题和角落案例,以及性能改进(在一些泛型程序中多达20%)。在3月发布的Go 1.18中,长期寻求的泛型功能被添加到语言中。
同时,Go的内存模型现在明确地定义了sync/atomic包的行为,为实现同步算法提供了低级别的原子内存基元。happens-before关系的正式定义已被修订,以与C、C++、Java、JavaScript、Rust和Swift使用的内存模型保持一致。现有的程序不受影响。除了内存模型的更新,sync/atomic包中还有一些新的类型,如atomic.int64和atomic.Pointer(T),使得使用原子值更加容易。
Go 1.19可以从go.dev下载,用于Windows、macOS和Linux。Go 1.19的其他功能:
- 垃圾收集器增加了一个软内存限制。该限制有助于优化Go程序,使其在具有专用内存量的容器中尽可能有效地运行。
- 性能和实现方面的改进包括:动态调整循环程序栈的大小以减少堆栈版权,在大多数Unix系统上自动使用额外的文件描述符,在x86-64和ARM64上为大型开关语句提供跳转表,以及在ARM64上支持调试器注入的函数调用。
- 对方法声明中的类型参数做了一个小的修正。现有的程序不受影响。
- 文档注释现在支持链接、列表和标题语法,以帮助用户编写更清晰的文档注释,特别是在具有大型API的包中。
- 为了安全起见,os/exec 包不再尊重 PATH 查询中的相对路径。
- 一个新的构建约束,
unix,当目标操作系统是任何类似Unilx的操作系统时,就可以满足。