自从2009年开源以来,Go获得了越来越多开发者的喜爱,在最新的TIOBE编程语言排行榜中排名第14。开发者调查分析公司SlashData发布了2021年《开发者报告》显示,Go开发者数量的增长速度是Ruby的两倍。许多大公司比如Facebook、腾讯、百度都有项目使用Go语言,Docker和Kubernetes也都是由Go编写的,另外,Go语言还受到许多云创业公司的喜爱。
那么为什么Go如此受欢迎呢?Go的五位创始人在《Communications of the ACM》一书中揭晓了答案,其中表示,Go的成功之处在于它专注于软件项目设计的整体环境。一方面,Go的以开发为中心的理念让其社区得以蓬勃发展。另一方面,Go社区及其构建的技术最终使得Go成为现代云计算环境的重要组成部分。
(Tiobe Index排名)
Go的早期发展
Go是一种静态强类型、编译型语言,在语法上和C语言相近,但Go包含垃圾回收功能,可以自动释放变量不再使用的内存。另外,Go利用了新的多核处理器,在专用内核上运行垃圾回收,以降低对延迟的影响。
并发性是作为Go语言的核心功能提供的,而不是作为单独可选的库提供的。这很大程度上解释了为什么Go是这样建造的。
在Go的成长中吸取了很多谷歌的经验,并且有4000名活跃的开发者共享的庞大的多语言代码库,这些开发者认为需要有一种更好的方法来处理大规模负载。于是Go孕育而生——它是专门设计用于并发性以及为其提供一流的支持,不仅可以有效的处理多个任务,还能同时执行多个任务。
在Go诞生之前,工程师们一直使用着相对笨拙的语法和大小固定的线程堆栈,那时,支持并发的线程并不受欢迎,因为它们不仅难创建而且难以使用和管理。
而解决这个问题是创造Go的主要动机之一。
对开发者的关注贯穿于Go的开发
云服务的发展也为Go带来了更多的使用者。
另外Go相比于其他的语言,还具有一些明显的优势。Go创始人在文中提到,Go "消除了在C和C++程序中导致许多问题的未定义行为"。(例如,如果代码试图运行一些有风险的行为,如解读空指针或使用超出数组或分片界限的索引,Go会简单地抛出一个运行时异常并停止运行程序)。
但Go的创始者认为,Go受欢迎另有原因。Go在构建项目的早期工作中发挥了很大的作用,为软件开发的打包、依赖关系、构建测试、部署和其他的日常工作建立了基础。
这吸引了那些将软件包用在其生态系统的开发者。虽然最初的版本只支持在Linux和MacOS X上使用,但Go社区中热情的开发者们很快就为Go的编译器和库创建了Windows版本,并将它们移植到其他操作系统。
其创始人表示,对开发者的关注贯穿于Go的开发。比如Go中包含对安全通信协议SSL和TLS支持的高质量加密库,以及包括一个内置的HTTPS客户端和服务器(用于与其他系统在线交互)的标准库。
Go处理库的方式也对开发者大有助力:Go的编译器只导入必要的库以包含在其二进制文件中,这避免了为了确保包含一个必要的功能,而导入整个库。
另外,考虑到开发人员的需求,Go允许从其他领域轻松导入外部库(同时还有自动检查兼容版本的方法)。
Go在标准版本中还支持优化技术,如程序剖析,以及对测试功能的支持,如模糊处理。Go甚至有一个代码布局的惯例。(Go的gofmt工具将源代码解析成这种标准化的布局。)gofmt工具和其他内置的工具有助于使Go更容易建立从IDE插件和调试器,到框架和构建自动化的任何东西。Go的创造者认为,他们的语言是专门为鼓励创建工具和自动化而设计的,"因此,Go中有一个丰富的、不断扩展的、互操作的工具包"。
保持一致性
虽然Go的创造者们也承认,在Go最早的几年里,每个星期的发布中都会对进行修补和调整。用户在更新到新的Go版本时,往往不得不改变他们的程序。
不过2012年以来(随着Go第一版的正式发布),Go的更新就只对语言和标准库进行向后兼容的修改,这样程序在编译到较新的Go版本时可以继续运行而不发生变化。
虽然结果并不乐观,但是Go的工具有了极大的发展——更好的编译器,更强大的构建和测试工具以及更多的支持Go的开源工具。
"虽然大多数语言的设计都集中在语法、语义或类型的创新上,但Go却专注于软件开发过程本身。"
——Matt Weagle (@mweagle) 2022年5月11日
文章指出,Go的功能集能够避免开发人员的过度拓展。但是,同时也提到了这一惯例的例外情况,即Go确实增加了一个重要的新功能。两个月前,Go增加了参数化多态性,是 "为适应Go的其他部分而量身定做的..."
"在坚持一致性、完整性和社区原则的情况下做出如此大的语言改变,将是对这种方法的严峻考验"。
Go的创造者表示Go能够有今天的成就和发展,离不开Go社区的成千上万的开源贡献者们。正如Go的创始人所说:"我们感谢每一个帮助Go成就今天的人"。
参考资料:
https://thenewstack.io/what-made-golang-so-popular-the-languages-creators-look-back/
成就一亿技术人