为什么 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 和通道非常适合这些领域。

适合数据科学

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

  • 卓越的错误处理和更轻松的调试正在帮助它比 Python 和 R 更受欢迎,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

而且它也不是那么安全,特别是如果您正在使用通道,当您发送到已关闭的通道时,Go 语言可以做得更好,而不仅仅是 panic。并且无法测试通道是否已关闭。

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 没有版本固定的概念。它只是直接从仓库的 head 拉取。我见过人们直接在源代码中嵌入他们所谓的“虚荣 URL”,其中声明了版本依赖项。在我看来,这太令人震惊了。

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