当地时间11月10日,Go核心开发团队技术leaderRussCox发文庆祝Go语言开源以来的12岁生日。 博客上最明显的变化是我们在go。dev上的新家,所有的Go站点统一整合到一个单一、连贯的网址下。作为整合的另一部分,我们用pkg。go。dev替换掉了原先的godoc。org。RussCox表示,今年是个多事之年,并对今年的主要进展作了回顾。 今年2月,Go1。16版本添加了对macOSARM64的支持,以及文件系统接口和嵌入文件、默认启用modules等多项改进和优化。 8月,Go1。17版本添加了对WindowsARM64的支持,大大提升了TLS密码套件决策的易用性和安全性;引入了修剪模块图(prunedmodulegraphs),使模块在大型项目中更高效,也添加了及新的、更易读的构建约束语法。Go1。17版本还在底层上将x8664的Go函数切换至基于寄存器的调用约定,让CPU密集型应用程序的性能提高了515。 IDE方面,支持在VSCodeGo中默认启用gopls,同时为gopls和VSCodeGo提供了多项改进,包括由Delve提供支持的强大调试体验。 此外,除了添加模糊测试支持的新提案,今年还正式提议为Go添加泛型,并明确这两者都将在Go1。18中提供。 据悉,Go团队本来预计在Go1。17中添加泛型,但后来遗憾表示要推迟。GoTeam也曾在其官方博客表示,大家很期待泛型,因此他们一直在努力,为可投入使用做各种细节的打磨,2021年这块会是重点。 RussCox亦表示,完善泛型将是他们2022年的重点工作之一。Go1。18中的初始版本只是一个开始,开发团队需要花时间使用泛型,以便编写最佳实践,以及决定应该将什么添加到标准库和其他库中。他们预计Go1。19(预计在2022年8月发布)及更高版本将进一步完善泛型的设计和实现,并将它们进一步整合到整体Go体验中。 2022年的另一个工作重点是供应链安全,涉及到被反复提到的依赖性问题,Go模块的设计提供了可复制、可验证的和经过验证的构建,但还有更多工作要做。从Go1。18开始,go命令将在二进制文件中嵌入更多有关其构建配置的信息,使可复制性更容易并帮助那些需要为Go二进制文件生成SBOM的项目。 RussCox提到,他们还开始研究Go漏洞数据库以及用于报告程序依赖项中漏洞的相关工具。目标之一是显着提高此类工具的信噪比:如果程序不使用易受攻击的功能,则不进行报告。在2022年计划将其作为独立工具提供,但也会将其添加到现有工具中,包括goplsVSCodeGo和pkg。go。dev。在改善Go供应链安全态势的其他方面,还有更多工作要做。 Go团队还开始研究Go漏洞数据库以及用于报告程序依赖项中漏洞的相关工具。他们在这项工作中的目标之一是显着提高此类工具的信噪比:如果程序不使用易受攻击的功能,则不会进行报告。在2022年期间,团队计划将其作为独立工具提供,同时将其添加到现有工具中。除此之外,在改进Go供应链安全态势方面,还有更多工作需要开展。 延展阅读: 《12年后,Go终于默认支持泛型》 《为什么Go语言没有泛型》