为什么 Go 语言的人气正在飙升

仅仅两年时间,Golang 就从第 65 位最受欢迎的编程语言跃升至第 17 位。以下是其快速增长背后的原因。
1004 位读者喜欢这篇文章。
GitHub launches Open Source Friday 

Opensource.com

Go 编程语言,有时被称为 Google 的 golang,其受欢迎程度正在强劲增长。虽然 Java 和 C 等语言继续在编程领域占据主导地位,但新的模型已经出现,它们更适合现代计算,尤其是在云端。Go 语言使用量的增加部分归因于它是一种轻量级的开源语言,适合当今的微服务架构。容器领域的宠儿 Docker 和 Google 的容器编排产品 Kubernetes 都是使用 Go 构建的。Go 语言在数据科学领域也越来越受欢迎,它在整体性能以及从“分析师的笔记本电脑到全面生产”的能力方面具有数据科学家所寻求的优势。

作为一种工程化的语言(而不是随着时间推移演变而来的语言),Go 语言在多个方面使开发人员受益,包括垃圾回收、原生并发以及许多其他原生功能,这些功能减少了开发人员编写代码来处理内存泄漏或联网应用程序的需求。Go 还提供了许多其他功能,这些功能非常适合微服务架构和数据科学。

正因为如此,Go 语言正在被有趣的公司和项目采用。最近,Tensorflow 的 API 已经添加,并且像 Pachyderm(下一代数据处理、版本控制和存储)这样的产品正在使用 Go 构建。Heroku 的 Force.comCloud Foundry 的部分也使用 Go 编写。越来越多的名字正在定期添加。

日益增长的普及度和使用率

在 2017 年 9 月的 TIOBE Go 语言指数中,您可以清楚地看到 Go 语言自 2016 年以来人气的惊人跃升,包括被评为 TIOBE 2016 年度编程语言名人堂的获奖者,成为年度评分增长最高的编程语言。目前,它在月度榜单上排名第 17 位,高于一年前的第 19 位和两年前的第 65 位。

TIOBE Index for Go

opensource.com

Stack Overflow 2017 年的调查也显示了 Go 语言普及度上升的迹象。Stack Overflow 对 64,000 名开发人员进行的全面调查试图通过询问“最喜爱、最讨厌和最想要的语言”来了解开发人员的偏好。这份榜单由较新的语言主导,如 Mozilla 的 Rust、Smalltalk、Typescript、Apple 的 Swift 和 Google 的 Go。但连续第三年,Rust、Swift 和 Go 都进入了“最喜爱”编程语言的前五名。

Most Loved, Dreaded, and Wanted Languages

opensource.com

Go 语言的优势

一些编程语言是随着时间的推移拼凑而成的,而另一些则是在学术界创建的。还有一些是在不同的计算时代设计的,面临着不同的问题、硬件和需求。Go 是一种明确设计的语言,旨在解决现有语言和工具的问题,同时原生利用现代硬件架构。它的设计不仅考虑到了开发团队,还考虑到了长期可维护性。

Go 语言的核心是务实的。在 IT 的现实世界中,复杂的大型软件是由大型开发团队编写的。这些开发人员的技能水平通常各不相同,从初级到高级。Go 语言很容易上手,并且适合初级开发人员工作。

此外,拥有一种鼓励可读性和理解性的语言非常有用。鸭子类型(通过接口)和诸如“:=”之类的简便功能(用于简短的变量声明)的结合,使 Go 语言具有动态类型语言的感觉,同时保留了强类型语言的优点。

Go 语言的原生垃圾回收功能消除了开发人员进行自己的内存管理的需求,这有助于消除两个常见问题

  • 首先,许多程序员已经开始期望内存管理将为他们完成。
  • 其次,内存管理对于不同的处理核心需要不同的例程。手动尝试考虑每种配置可能会大大增加引入内存泄漏的风险。

Go 语言的原生并发是网络应用程序的福音,这些应用程序的生死取决于并发性。从 API 到 Web 服务器再到 Web 应用程序框架,Go 项目倾向于专注于网络、分布式功能和/或服务,而 Go 的 goroutine 和 channel 非常适合这些领域。

适合数据科学

从大型数据集中提取商业价值正迅速成为公司的竞争优势,并且是编程领域非常活跃的领域,包括人工智能、机器学习等专业领域。Go 语言在这些数据科学领域具有多重优势,这正在增加其使用和普及率。

  • 卓越的错误处理和更简单的调试正在帮助它超越 Python 和 R,这两种最常用的数据科学语言。
  • 数据科学家通常不是程序员。Go 语言有助于原型设计和生产,因此它最终成为将数据科学解决方案投入生产的更强大的语言。
  • 性能非常出色,这对于大数据爆炸式增长和 GPU 数据库的兴起至关重要。Go 语言不必调用基于 C/C++ 的优化来获得性能提升,但它确实为您提供了这样做的能力。

Go 语言扩展的种子

软件交付和部署发生了巨大的变化。微服务架构已成为释放应用程序敏捷性的关键。现代应用程序被设计为云原生,并利用云平台提供的松耦合云服务。

Go 是一种明确设计的编程语言,专门为满足这些新需求而设计。Go 语言专为云而编写,由于其对并发操作的掌握和其构造之美,普及度不断提高。

不仅 Google 在支持 Go,其他公司也在帮助市场扩张。例如,Go 代码通过企业级发行版(如 ActiveState 的 ActiveGo)得到支持和扩展。作为一个开源运动,golang.org 网站和年度 GopherCon 会议构成了强大而现代的开源社区的基础,该社区允许将新想法和新能量带入 Go 的开发过程。

Jeff Rouse, Director of Product Management, ActiveState
ActiveState 产品管理总监。Jeff 对创新、创业、开源和构建伟大的产品充满热情。凭借超过 20 年的创业公司到上市公司技术公司的经验,Jeff 领导过开发团队和业务运营,创造了创新产品,并将其推向市场。

15 条评论

> 由较新的语言主导,如 Mozilla 的 Rust、*Smalltalk*
Smalltalk 是所有面向对象语言的祖母!

Simula 是所有面向对象语言的祖父!

回复 作者 kees (未验证)

当下的潮流。Go 语言不错,它有自己的空间,但仅此而已。像多年来出现的所有这些语言一样,它不是万能灵药,无论多少人愿意相信。

感谢 Jeff 的文章。我读过 Brian Kernighan 的书,并将 Go 语言用于一些小型的数据处理项目,但我无法真正对它感到兴奋。

我的主要原因是多年来使用 Java、Groovy 和 Python 编程使我形成了面向对象的思维方式,我发现很难放弃。除此之外,我发现一些令人恼火的细节 - 比如将名称大写使其公开(真的,文件中出现一次的 public、export、import 关键字更容易找到且更具描述性),或者限制 for 和 if 语句中的初始化器能力,这迫使程序员将应该在初始化器中的东西放在 for 和 if 之外 - 这让我感到惊讶和失望,考虑到 Go 设计师的显赫血统。

但无论如何,就非面向对象的语言而言,它是可用的,并且(从我的角度来看)是对许多早期努力的改进。

今天我了解到一个名为“GPU 数据库”的新概念。感谢您分享这篇文章!

由 Google 设计,旨在满足 C++ 对新程序员来说过于复杂的需求。

感谢这篇文章让我了解了 Rust 编程语言...

我年纪够大,记得 Ruby、Perl、Scala、Java、PHP、ASP、VB 的兴衰,我知道我遗漏了成千上万种语言。Go 语言正在升温,但它不会持久。没有一种语言能永远保持领先地位,大多数语言几乎都不能保持领先地位很长时间。只需使用对您的项目有意义的任何语言即可。我确信 Go 语言对某些人来说很棒,对另一些人来说是噩梦。就像所有语言一样。

当下的潮流。

不是潮流 - 类似 C 的语法和原始速度让我认为 4GL 语言终于变得有用了。
我们将使用在 Rasberry Pi 上运行的 Go 程序构建未来能源网格。

我也不认为这是一种潮流,这是一种非常容易“上手”的语言 :)

Smalltalk 不是一种新语言。它已经存在了将近半个世纪。
https://en.wikipedia.org/wiki/Smalltalk

而且它也不是那么安全,尤其是当您使用 channel 时,当您发送到已关闭的 channel 时,Go 应该做得更好,而不是仅仅 panic。而且没有办法测试 channel 是否已关闭。

https://dave.cheney.net/2014/03/19/channel-axioms

您可以将(类型上的方法)的实现拆分到多个文件中(我在 GitHub 上看到有人这样做),这可能会让您四处寻找类型的完整定义。再加上隐式接口,您真的会感到困惑。也没有像 Java 中的“instanceof”运算符或 Objective-C 中的“conformsTo”方法,因此如果您想在运行时测试是否符合接口,您首先必须将变量分配给一个空接口并从那里开始。

在性能方面,它仍然远不及 C
http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=go&lang2=…

“卓越的错误处理”?请参阅标题为“简化重复性错误处理”的部分 https://blog.golang.org/error-handling-and-go

Go 语言的错误处理没有任何优越之处。恰恰相反。编写网络代码,您很快就会发现 75% 的代码是相同的错误检查模式,由于 Go 语言对错误处理的短视观点,您无法摆脱这种模式。

go get 没有版本固定的概念。它只是直接从 repo 的 head 拉取。我见过有人直接在源代码中嵌入他们所谓的“虚荣 URL”,其中声明了版本依赖性。对我来说,这真是令人震惊。

Creative Commons 许可协议本作品根据 Creative Commons 署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.