正式支持泛型!Go语言发布有史以来最大更新
美国时间2022年3月15日,Go核心团队官宣了Go 1.18版本正式版的发布,其官博称之为“整个Go社区的一个巨大的里程碑”。在这个版本中,Go核心团队做了Go语言开源以来的最大一次语法特性变更——增加了对泛型(generics)的支持。
这里简要整理一下 Go 1.18版本的重大更新。
泛型(Generics):在Go 1.18版本中,引入了对使用参数化类型的泛型代码的新支持。支持泛型是Go最常被要求添加的功能特性,这一版本能够提供大多数用户目前需要的泛型支持。随后的版本将继续为一些更复杂的泛型用例提供额外支持。Go官方提供了泛型教程来帮助开发者了解这个新功能,探索使用泛型来优化和简化代码的方法。
模糊测试(Fuzzing):伴随着Go 1.18版本的发布,Go成为第一个将模糊测试完全整合到其标准工具链中的主要编程语言。这意味着与其他语言不同,不需要第三方支持集成。作为一种测试软件漏洞的方法,模糊测试的集成为Go的代码增加了一层额外的安全保障,尤其在当下,随着网络攻击在频率和复杂性上不断升级,这一点显然至关重要。在Go的模糊测试中,会使用随机的数据对代码进行测试,以尝试找出漏洞或导致崩溃的输入。可以通过模糊测试发现的一些漏洞示例包括 SQL 注入、缓冲区溢出、拒绝服务和跨站点脚本攻击。Go官方也提供了模糊测试教程,来帮助用户理解使用这个新功能。
工作区(Workspaces):当前,Go module几乎已被普遍接纳和采用。在Go团队2021年的用户调查中,用户反馈Go module的最常见的挑战是跨多个module工作。Go 1.18版本通过新的Go工作区模式(Go workspace mode)解决了这一问题,这使得在多个module中工作变得简单。
20%的性能改进:对于苹果M1、ARM64和PowerPC64用户来说,这是一条绝对的好消息。由于Go 1.17的寄存器ABI调用约定扩展到这些架构,Go 1.18的CPU性能提升幅度高达20%。
关于这一版本更详细的信息,可查阅Go 1.18发布说明(https://go.dev/doc/go1.18)。
2007年9月,在Rob Pike 回复给 Robert Griesemer、Ken Thompson 的邮件中,谈到了一门全新的编程语言,其设计仍在雏形中,建议将之取名为Go。在敲定名字之后,Rob、Robert、Ken 三人开始在 Google 内部进行研发。
2008年5月,Go的研发获得了 Google 的全力支持。
2009年11月10日,Go 项目团队首次公开发布该语言,并将代码全部开源,这一天也被定为Go的官方生日。其源代码最初托管在 http://code.google.com 上,之后几年才逐步的迁移到 GitHub 上。
- 2011年,Go 语言的第一个稳定(stable)版本 r56 发布。
- 2012年,Golang 的第一个正式版本 Go1 发布。
- 2013年:Go 1.1 和 Go 1.2 正式版本发布。
- 2014年:Go 1.3 和 Go 1.4 正式版本发布。
- 2015年:Go 1.5 正式版本发布。
- 2016年:Go 1.6 和 Go 1.7 正式版本发布。
- 2017年:Go 1.8 和 Go 1.9 正式版本发布。
- 2018年:Go 1.10 和 Go 1.11 正式版本发布。
- 2019年:Go 1.12 和 Go 1.13 正式版本发布。
- 2020年:Go 1.14 和 Go 1.15 正式版本发布。
- 2021年:Go 1.16 和 Go 1.17 正式版本发布。
可以看到,自从踏上发展正轨后,Go语言基本保持了每半年发布一次的更新频率。综合来看,Go 开源至今已逾12年,尽管背靠大树,但其发展过程仍然比较曲折。最初发布时获得了一定关注,而后就开始走下坡路,直到2015年重新设计优化 GC 实现后才开始触底反弹,2016年重新流行起来,直到现在也维持在主流编程语言之列。
当前,Go 语言在国内也热度颇高。一方面是基于其高效的开发方式,另一方面则因为Go 语言天生“为云而生”,在全面拥抱云的时代得天独厚。
对开发者来说,Go 语言在保证了快速编译的同时,也保证了高效的开发效率和程序运行性能。相较于 Java 和 C++ 的滞重,Go 语言可以让开发速度更快、更容易,且性能也不差。此外,Go 语言的特性也不多,更容易上手,尤其对有 C 语言基础的同学,学习成本较低。
放眼全球,使用 Go 语言的大公司和优秀开源项目都比较多。有人称 Go 为云端的编程语言。因为 Go 语言生成的二进制可执行文件很小,快速启动,内存占用也很小,在容器中运行时,没有遗留负担。很多CNCF项目,包括Kubernetes和Istio,都是用Go编写的。
随着基础设施的不断云化,Go 语言的发展未来可期。