美国时间2022年3月15日,Go核心团队正式宣布发布Go1.18正式版,官方博客称这是“整个Go社区的一个巨大里程碑””。在这个版本中,Go核心团队进行了自Go语言开源以来最大的语法特性更改——添加了对泛型的支持。 以下是Go1.18主要更新的简要总结。 泛型:在Go1.18中,引入了对使用参数化类型的泛型代码的新支持。对泛型的支持是Go中最常被请求的特性,这个版本提供了大多数用户当前需要的泛型支持。后续版本将继续为一些更复杂的泛型用例提供额外支持。Go官方提供了泛型教程,帮助开发者了解这一新特性,探索使用泛型优化和简化代码的方法。 模糊测试:随着Go1.18的发布,Go成为第一个将模糊测试完全集成到其标准工具链中的主要编程语言。这意味着与其他语言不同,不需要第三方支持集成。作为测试软件漏洞的一种方法,模糊测试的集成为Go的代码增加了一层额外的安全性,这在网络攻击的频率和复杂性不断升级的时候显然是至关重要的。 在Go模糊测试中,代码针对随机数据进行测试,以试图找到导致崩溃的错误或输入。可以通过模糊测试发现的一些漏洞示例包括SQL注入、缓冲区溢出、拒绝服务和跨站点脚本攻击。Go官方还提供了模糊测试教程,帮助用户理解和使用这个新特性。Fuzz测试示例 Workspaces:目前,Go模块已经几乎被普遍接受和采用。在Go团队的2021年用户调查中,用户报告说Go模块最常见的挑战是跨多个模块工作。Go1.18版通过新的Go工作区模式解决了这个问题,这使得在多个模块中工作变得简单。 20%的性能提升:这对AppleM1、ARM64和PowerPC64用户来说绝对是个好消息。由于Go1.17的寄存器ABI调用约定扩展到这些架构,Go1.18将CPU性能提高了20%。 有关此版本的更多详细信息,请参阅Go1.18发行说明(https://go.dev/doc/go1.18)。 Go语言发展简史 2007年9月,RobPike在回复RobertGriesemer和KenThompson的邮件中谈到了一种全新的编程语言,其设计尚处于起步阶段,建议为Go命名。确定名称后,Rob、Robert和Ken开始在Google内部进行研发。 2008年5月,围棋的研发得到了谷歌的全力支持。 2009年11月10日,Go项目组首次公开发布该语言,并开源所有代码。这一天也被定为Go的官方生日。它的源代码最初托管在http://code.google.com,并在接下来的几年里逐渐迁移到GitHub。 2011年,Go语言第一个稳定(stable)版本r56发布。 2012年,Golang第一个正式版Go1发布。 2013:Go1.1和Go1.2正式发布。 2014:Go1.3和Go1.4正式发布。 2015:Go1.5正式版发布。 2016:正式发布Go1.6和Go1.7。 2017:Go1.8和Go1.9正式发布。 2018:正式发布Go1.10和Go1.11。 2019:正式发布Go1.12和Go1.13。 2020:正式发布Go1.14和Go1.15。 2021:正式发布Go1.16和Go1.17。 可以看出,自从发展步入正轨以来,Go语言基本保持了每六个月发布一次的更新频率。总的来说,Go已经开源超过12年了。虽然背靠大树,但它的发展历程还是比较曲折的。它在刚发布时获得了一定的关注度,随后开始走下坡路。直到2015年重新设计和优化GC实现后,它才开始触底。它在2016年再次流行起来,直到现在仍然是主流编程语言之一。 目前Go语言在国内也很流行。一方面是基于其高效的开发方式,另一方面是因为Go语言天生“为云而生”,在全面拥抱云的时代独树一帜。 对于开发者来说,Go语言不仅保证了快速编译,还保证了高效的开发效率和程序性能。相比于Java和C++的迟钝,Go语言可以让开发变得更快、更简单,而且性能还不错。另外,Go语言特点少,使用起来也比较简单,特别是对于有C语言基础的同学来说,学习成本比较低。 放眼全球,使用Go语言的大公司和优秀的开源项目不在少数。有些人称Go为云的编程语言。由于Go语言生成的二进制可执行文件很小,启动速度快,内存占用小。在容器中运行时,没有遗留负担。许多CNCF项目,包括Kubernetes和Istio,都是用Go编写的。 随着基础设施的不断云化,未来Go语言的发展可期。
