如果没有Google这个靠山,Go 凭什么火?

2022 年 6 月 6 日 CSDN

整理 | 章雨铭        责编 | 屠敏
出品 | CSDN(ID:CSDNnews)

自从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/ 

   
   
     
— 推荐阅读 —
    
    
      
☞CSDN创始人蒋涛:“重应用轻生态”的AI开源模式非长久之计
☞升职还有可能被降薪?腾讯薪酬制度惹争议!
☞马斯克强制员工每周到岗40个小时:“要不是我当初睡工厂,特斯拉早破产了!”

一键三连 「分享」「点赞」「在看」

成就一亿技术人

登录查看更多
0

相关内容

【干货书】流畅的Python清晰、简洁和有效的编程,1011页pdf
《Julia数据科学》及代码,166页pdf
专知会员服务
47+阅读 · 2021年11月4日
专知会员服务
91+阅读 · 2020年12月26日
【GPT-3作者亲解】超大型语言模型少样本学习,109页ppt
专知会员服务
107+阅读 · 2020年12月19日
【Contextual Embedding】什么时候上下文嵌入值得使用?
专知会员服务
15+阅读 · 2020年8月2日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
63+阅读 · 2020年3月26日
为取代 C++,Google 强势开源 Carbon 语言!
为什么每一名程序员都应该学习 C++?
InfoQ
0+阅读 · 2022年4月26日
K8s 为什么这么复杂?
CSDN
0+阅读 · 2022年2月10日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
1+阅读 · 2013年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
Arxiv
0+阅读 · 2022年7月26日
Arxiv
28+阅读 · 2022年3月28日
Arxiv
10+阅读 · 2021年2月18日
已删除
Arxiv
32+阅读 · 2020年3月23日
How to Fine-Tune BERT for Text Classification?
Arxiv
13+阅读 · 2019年5月14日
Arxiv
22+阅读 · 2018年8月30日
VIP会员
相关VIP内容
【干货书】流畅的Python清晰、简洁和有效的编程,1011页pdf
《Julia数据科学》及代码,166页pdf
专知会员服务
47+阅读 · 2021年11月4日
专知会员服务
91+阅读 · 2020年12月26日
【GPT-3作者亲解】超大型语言模型少样本学习,109页ppt
专知会员服务
107+阅读 · 2020年12月19日
【Contextual Embedding】什么时候上下文嵌入值得使用?
专知会员服务
15+阅读 · 2020年8月2日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
63+阅读 · 2020年3月26日
相关基金
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
1+阅读 · 2013年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
相关论文
Arxiv
0+阅读 · 2022年7月26日
Arxiv
28+阅读 · 2022年3月28日
Arxiv
10+阅读 · 2021年2月18日
已删除
Arxiv
32+阅读 · 2020年3月23日
How to Fine-Tune BERT for Text Classification?
Arxiv
13+阅读 · 2019年5月14日
Arxiv
22+阅读 · 2018年8月30日
Top
微信扫码咨询专知VIP会员