写点什么

Go 语言创造者回顾:是什么让 GoLang 如此受欢迎?

作者:三石
  • 2022 年 6 月 07 日
  • 本文字数:2216 字

    阅读完需:约 7 分钟

Go语言创造者回顾:是什么让GoLang如此受欢迎?

自从 2009 年开源以来,Go 语言一直深受开发者的欢迎。作为 Go 创建者的五位谷歌工程师在《Communications of the ACM》中回顾了 Go 语言的成长历程。他们表示 Go 作为一个公共项目,早期从 Google 许多同事的建议和帮助中获益匪浅,同时也离不开成千上万的个人贡献者和数十家公司的支持。依靠强大社区的支持 Go 语言获得了令人难以置信的推广和普及,除了 Docker Kubernetes 使用 Go 语言编写,云原生计算基金会托管的大多数项目都是基于 Go 语言实现的,Go 语言也成为了云服务商核心基础设施的基础。在最近的Tiobe 指数中 Go 排名 14。

    这就有一个非常有趣的问题,为什么 Go 语言会变得如此流行?回顾过去的 13 年,Go 语言的开发者认为 Go 的成功之处在于其将重心放在了软件项目设计的“整体环境”上,认为语言的生态环境比其自身特征更重要。正是 Go 语言的“以开发为中心的思想”帮助其社区蓬勃发展,然后借助于社区以及其所构建的技术生态,最终使 Go 语言成为“现代云计算环境重要组成部分”。

 

Go 语言的早期

众所周知 Go 出自于谷歌,是这家创立于 1998 年的搜索引擎公司成立 10 多年后推出的语言。得益于 Go 语言紧凑的二进制文件,使其更容易部署而且不需要单独的运行环境(这也是其与 Java 的不同之处)。除此之外 Go 的其它语言特性也相当有吸引力,例如提供了 GC(垃圾收集)功能,可以自动释放那些不再被变量使用的内存。同时 Go 充分利用了新的多核处理器,在专用内核上进行垃圾回收以降低延迟的影响。

同时 Go 语言将并发性作为核心库进行提供而不是作为独立的可选库,这在很大程度上表明了 Go 创建初衷是什么了。纵观 Go 语言的成长历程,借鉴了很多 Google 的经验。Go 有着约 4000 名活跃开发者共享的庞大的语言代码库,开发者的日常经验表明他们需要一种更好的方法来处理大规模负载,特别是能充分发挥新的多核芯片性能的方法。Go 语言就是应对这些挑战而生的,是专门设计的用于为并发和并行提供可靠支持的语言。它不仅可以有效处理多个任务,还能同时执行多个任务。

Go 语言出现之前,开发工程师们一直受困于笨拙的语法和庞大的固定大小的线程堆栈,那时支持并发的线程并不受欢迎,因为它们不仅难以创建和使用,而且难以管理。而解决这些问题就成了 Go 语言的主要动机之一。


非一般的语言设计

推动 Go 语言的流行,部分原因要归功于云服务商及其提供的大规模的生产环境(这也是 Go 语言设计初衷),当然也具备一些相比其他语言更明显的优势:Go 语言删除了在 C 和 C++中导致出现很多问题的未定义行为,例如在代码中尝试取消对空指针的引用,或者使用超出数组或分片边界的的下标等,Go 会简单的抛出一个运行时异常同时终止程序的运行。

但 Go 语言的创建者却并不这么认为,在他们看来 Go 语言之所以受欢迎主要是其为软件开发的打包、依赖、构建测试、部署以及其他日常任务构建了基础,即使这些方面通常不被语言设计所重视,但却吸引了开发人员并将这些软件包应用到了其他的生态系统。虽然最初的版本只支持 Linux 和 MacOS X,但社区中热情的开发者很快将 Go 的编译器和库改编成 Windows 版本,并将他们移植到其他操作系统。

另外对开发人员的关注贯穿到整个 Go 语言的开发中也是一个重要原因。例如,初期 Go 就提供了优质的加密库文件(包含了安全通信协议 SSL 和 TLS),并且 Go 的标准库还包含了一个内置的 HTTPS 客户端和服务器,用于与其他系统的在线交互。再就是 Go 处理库的方式,Go 的编译器被设计成只需要导入库中的涵盖必要功能的二进制文件,从而避免了像其他语言那样导入整个库。考虑到开发人员的实际需要,GO 也支持从其他域方便的导入外部库(同时提供自动检查兼容版本的方法)。

再就是 Go 语言的标准库提供了对程序分析的技术优化,以及模糊测试的支持。Go 甚至还提供了对代码布局的约定(Go 的 gofmt 工具支持将源代码格式化为这种标准化布局),gofmt 和其他内置工具有助于更轻松的创建从 IDE 插件,调试器到框架以及自动化构建的任何东西。所以 Go 的创建者认为,Go 语言是专门为鼓励创建工具和自动化而设计的,因为 Go 拥有了一个丰富、不断扩展和互操作的工具包。同时他们还认为语言只是其魅力的一部分,还包括整个的 Go 的生态:库、工具、约定和软件工程的整体方法

 

保持一致性

在保持语言的一致性上,Go 曾经走过弯路。在最初的几年,每周发布的版本都会对其进行修改和调整,以至于用户在更新 Go 的版本时,往往不得不去修改他们的程序。但自 2012 年以来(Go 的第一版正式发布),Go 的更新都对语言和标准库进行向后兼容,更新 Go 的版本后再也不需要对程序进行修改了。从那时起虽然 Go 语言本身没有进行大版本的更新,但 Go 的工具却有了极大的发展,有了更好的编译器,更强大的构建和测试工具,改进的依赖管理,以及支持 Go 的大量开源工具。这都有助于吸引用户和构建一个蓬勃发展的第三方软件生态。

"虽然大多数语言的设计都集中在语法、语义或类型的创新上,但 Go 却专注于软件开发过程本身。"

——Matt Weagle (@mweagle) 2022 年 5 月 11 日

权衡利弊虽然 GO 尽可能避免开发过度拓展,但也不是绝对的。两个月前 Go 新增了参数多态这个为适应 Go 的其他部分而设计的重要功能。“在坚持一致性、完整性和社区性原则的同时进行如此大的语言更改,将是对这种方法的严峻考验。”Go 语言的创建者深知一种语言的发展壮大离不开社区的支持,正是这成千上万的贡献者的支持才有了 Go 今天的成就。"我们感谢所有帮助 Go 成就今天的人"。

https://thenewstack.io/what-made-golang-so-popular-the-languages-creators-look-back/

用户头像

三石

关注

大道至简,知易行难! 2018.05.06 加入

我思故我在! 一个苏宁老兵的点滴记录

评论

发布
暂无评论
Go语言创造者回顾:是什么让GoLang如此受欢迎?_go语言_三石_InfoQ写作社区