Go 1.19 预计将于 2022 年 8 月发布,目前 Go 1.19 的 beta 版本发布了,下面介绍一下 GO 1.19 版本的主要变更:
语言的变化
语言只有一个很小的变化,对方法声明中类型参数的范围进行了很小的修正。现有程序不受影响。
记忆模型
Go 内存模型已经过修改,以使 Go 与 C、C++、Java、JavaScript、Rust 和 Swift 使用的内存模型保持一致 。
端口
Go 1.19 支持 Linux 上的龙芯 64 位架构 LoongArch 。(GOOS=linux
, GOARCH=loong64
).
工具
文档评论
Go 1.19 在文档注释中添加了对链接、列表和更清晰的标题的支持。作为此更改的一部分,gofmt
现在可用于重新格式化文档注释,以使其呈现的含义更清晰。
新的unix
构建约束
现在可以在 //go:build 行中识别构建约束 unix。 如果目标操作系统(也称为 GOOS)是 Unix 或类 Unix 系统,则满足约束。
运行
运行时现在包括对软内存限制的支持。此内存限制包括 Go 堆和运行时管理的所有其他内存,不包括外部内存源,例如二进制文件本身的映射、以其他语言管理的内存以及操作系统代表 Go 程序持有的内存。
编译器
- 编译器现在使用跳转表来实现大整数和字符串 switch 语句。switch 语句的性能改进各不相同,可以快 20% 左右。
riscv64
端口现在支持使用寄存器传递函数参数和结果,基准测试显示有 10% 或更多的性能改进。- Go 编译器现在需要该
-p=importpath
标志来构建可链接的目标文件。
汇编器
与编译器一样,汇编器现在需要该 -p=importpath
标志来构建可链接的目标文件。
链接器
在 ELF 平台上,链接器现在以标准 gABI 格式而不是传统的 .zdebug
格 发出压缩的 DWARF 部分。
其他内容可以在 go1.19 文档中查看,其中一部分更改还未实现,或许在正式版本有所删减。