出品
开源中国
Go1.19现已发布,可以通过访问下载页面获得该版本。"它的大部分变化是在工具链、运行时和库的实现方面。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所有的Go程序都能像以前一样继续编译和运行"。该版本包括一些内存模型的调整,LoongArchport,文档评论机制的改进等。
具体更新内容如下:
Go1.19完善并改进了Go1.18。开发团队将Go1.19的泛型开发集中在解决社区报告的一些细微问题和极端情况,以及重要的性能改进(某些泛型程序性能改进高达20%)。
文档注释现在支持链接、列表和更清晰的标题语法。此更改有助于用户编写更清晰、更容易浏览的文档注释,尤其是在具有大型API的包中。作为此更改的一部分,gofmt现在重新格式化文档注释以将标准格式应用于这些功能的使用。有关所有详细信息,可参阅“GoDocComments”。
Go的内存模型现在明确定义了sync/atomic包的行为。happens-before关系的正式定义已被修改,以与C、C++、Java、JavaScript、Rust和Swift使用的内存模型保持一致。现有程序不受影响。随着内存模型的更新,sync/atomic包中还有新的类型,例如atomic.Int64和atomic.Pointer[T],以便更容易使用atomicvalues。
出于安全原因,os/exec包不再遵循PATH查找中的相对路径。有关详细信息,可参阅packagedocumentation。golang.org/x/sys/execabs的现有用途可以在仅使用Go1.19或更高版本构建的程序中移回os/exec。
垃圾收集器增加了对软内存限制的支持,在新的垃圾收集指南中有详细讨论。该限制对于优化Go程序以在具有专用内存量的容器中尽可能高效地运行特别有用。
当目标操作系统(GOOS)是任何类Unix系统时,新的构建约束unix就得到满足。如今,类Unix是指所有Go的目标操作系统,除了js、plan9、windows和zos。
此外,Go1.19还包括了各种性能和实现改进,包括动态调整初始goroutine堆栈以减少堆栈复制、在大多数Unix系统上自动使用附加文件描述符、在x86-64和ARM64上用于大型switch语句的跳转表,支持ARM64上的调试器注入函数调用,RISC-V上的registerABI支持,以及在龙芯64位架构LoongArch(GOARCH=loong64)上运行的Linux的实验性支持。
详情可查看官方博客: