Go 语言 10 岁了!这里有你不知道的 Go 的成长历程

(点击上方蓝字,快速关注我们)


编译:伯乐在线 -  听风


【导读】:Go 语言的主要缔造者 Rob Pike、Robert Griesemer 与 Ken Thompson,他们三人撰文回顾 Go 的发展史与一些重要人物,并曝光促成 Go 诞生的相关邮件的片段。



2017 年 9 月,Go 语言迎来其诞生十周年纪念日。


关于 Go 语言设计的初次讨论是在 2007 年 9 月 20 日,一个周四的下午。这次讨论促使 Robert Griesemer、Rob Pike、 以及 Ken Thompson 于第二天下午 2 点,在 Google’s Mountain View 的 43 号大楼的 Yaounde 会议室又组织了一次关于该语言设计的会议。语言的名字于 9 月 25 号确定了,在有关该语言设计的第一封邮件里面有关于命名的考量:


(译注:这是一封由 Rob Pike 在 2007 年 9 月 25 号,星期二,下午 3:12 回复给 Robert Griesemer、Ken Thompson 的有关编程语言讨论主题的邮件,邮件正文大意为:在开车回家的路上我得到了些灵感。1.给这门编程语言取名为“go”。你可以为这个命名假借各种理由,但它确实有其可取之处。它很简短,易书写。工具类可以命名为:goc、 gol、goa。交互式的调试工具也可以直接命名为“go”。语言文件后缀名为 .go ……)


(值得一提的是,本语言的名字是 Go ;“golang”来自于其 web 站点网址(go.com 在当时已是一个迪士尼 web 站点地址。),并不是该语言的正确名字。)


Go 项目团队将 2009 年 11 月 10 日,即该语言正式对外开源的日字作为其官方生日。源代码最初托管在 code.google.com 上,之后几年才迁移到 GitHub 上。但是,现在我们要回到语言设计的最初概念构建阶段,即更早的两年,这可以让我们做更进一步地回顾,以更长远的视角,见证语言发展历史上的一系列早期事件。


在开发设计 Go 语言过程中的第一个重大惊喜是收到了以下这封邮件:



(译注:这是一封由 Ian Lance Taylor 在 2008 年 6月 7 日(星期六)的晚上 7:06 写给 Robert Griesemer、Rob Pike、 Ken Thompson 的关于 Go gcc 编译器前端的邮件。邮件正文大意如下:我的同事向我推荐了这个网站 http://…/go_lang.html 。这似乎是一门很有趣的编程语言。我为它写了一个 gcc 编译器前端。虽然这个工具仍缺少很多的功能,但它确实可以编译网站上展示的那个素数筛选程序了。)


(Drawing Copyright ©2017 Renee French)


Ian Lance Taylor 的加入以及第二个编译器 (gcc go) 的实现 在带来震惊的同时,也伴随着喜悦。这对 Go 项目来说不仅仅是鼓励,更是一种对可行性的证明。语言的第二次实现对制定语言规范和确定标准库的过程至关重要,同时也有助于保证其高可移植性,这也是 Go 语言承诺的一部分。


虽然 Ian 的办公室离我们不远,但在收到此邮件以前,我们三人与他素未谋面。不过,自那以后,Ian Lance Taylor 便成为了设计和实现 Go 语言及其工具的核心人物。


 Russ Cox 在2008 年带着他的语言设计天赋和编程技巧也加入了刚成立不久的 Go 团队。Russ 发现 Go 方法的通用性意味着函数也能拥有自己的方法,这直接促成了 http.HandlerFunc 的实现,这是一个出乎我们所有人意料的结果。Russ 还提出了更多的泛化性的想法,比如 io.Reader 和 io.Writer 接口,奠定了所有 I/O 库的整体结构。


Jini Kim 是我们最初的产品经理,聘请了安全专家 Adam Langley 帮助 Go 走向 Google 外面的世界。Adam 为我们做了许多不为外人知晓的工作,包括创建最初的 golang.org  网站以及 build dashboard。不过他最大的贡献当属创建了 cryptographic 库。起先,在我们中的部分人看来,这个库无论在规模还是复杂度上都不成气候。但是就是这个库在后期成为了很多重要的网络和安全软件的基础,并且成为了 Go 语言开发历史的关键组成部分。许多网络基础设施公司,比如 Cloudflare,均重度依赖 Adam 在 Go 项目上的工作,互联网也因它变得更好。因此,就 Go 而言,我们由衷地感谢 Adam。


事实上,有许多公司在项目早期就开始使用 Go 语言进行开发,尤其是一些初创公司。在这些公司当中有些现已成为云计算领域中的巨头。有一家创业公司,现在叫 Docker,就是使用 Go 进行项目开发,并促进了计算机领域的容器行业,进而出现了像 Kubernetes 这样的项目。现在,我们完全可以说 Go 是容器语言,这是另一个完全出乎意料的结果。


不过,Go 在云计算领域中所起的作用更大。2014 年 3 月, Donnie Berkholz 为 RedMonk 撰写文章,声称 Go 是“云计算基础设施的新兴语言”。同时,Apcera 的 Derek Collison 表示,Go 已是一门云计算语言。彼时,这样的表述可能言过其实,但 Berkholz 所使用的“新兴”一词恰如其分地表达了 Go 语言在当时的地位。


如今 Go 已经是云计算编程语言。想象一下:一个只有 10 年发展经历的编程语言已经成为了如此巨大而且正在不断发展的行业的主导者,这种成功是每个人都无法想象的。如果你认为“主导”一词太过强势,请看看中国的互联网。一段时间以来,Go 在中国大量使用的数据一度让我们误认为 Google 趋势图出现了某些错误,但是凡是去过中国,参加过中国区 Go 语言大会的人都可以证实:Google 趋势图的数据是真实的。Go 在中国的使用非常火爆!


简而言之,Go 语言的十年发展旅程中经历了众多里程碑。最令人震惊的是我们现在的位置:保守估计至少有 50 万 Go 程序员。当发送那封为 Go 命名的邮件时,憧景将会有五十万 Go 追随者,这听起来一定很荒唐。但就在此时此刻,我们不仅有 50 万 gopher,并且这个数量还在持续增长。


说到 gophers,很高兴看到来自 Renee French 想法的吉祥物 Go Gopher(地鼠),不仅成为了一个非常受人喜爱的作品,而且也是世界各地Go 程序员的象征。许多各地区顶级的 Go 大会都被称为 GopherCons,因为他们聚集了来自世界各地的 gophers。


Gopher 会议正在飞速发展。第一次大会的举办只不过是三年前的事情,但今天在全世界各地有很多这样的 Gopher 大会,并且还有无数小的本地“聚会”。无论哪一天,都会有不止一个 gopher 群体相聚在世界上的某个地方分享有关 Go 语言设计的想法。

回顾过去十年的 Go 设计和开发,Go 社区的发展尤其惊人的。技术会议和聚会的数量、长长的且不断增加的 Go 项目贡献者名单、大量使用Go 实现的开源代码库、使用 Go 开发公司数量(有些甚至只使用 Go 开发):任何一项数据考量后都足以让人震惊!


就我们三人而言,Robert、 Rob 和 Ken,当初只是想让我们的编程生活更轻松一些,而如今,我们难以置信地、欣慰地看到我们的工作已经开始起作用了。


未来十年它将会带来什么呢?让我们拭目以待。




看完本文有收获?请转发分享给更多人

关注「程序员的那些事」,提升编程技能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Golang 和 Java 都是非常强大的编程语言,它们都有自己的优势和特点。因此,是否要选择 Golang 或者 Java 这两种语言来开发项目,主要取决于具体的需求和使用场景。 Golang 与 Java 相比,具有更高的性能和更好的并发性能,同时也更容易编写和维护。这使得 Golang 在一些需要处理大量数据或者高并发情况下的应用程序中表现更加出色。另外,Golang的编译速度也非常快,这使得Golang在开发时可以更快地迭代代码。 然而,Java 是一种更成熟的编程语言,具有更广泛的应用场景和更多的库和框架支持。Java 的生态系统非常庞大,有很多成熟的开发工具和技术支持。Java 也是一种被广泛使用的企业级开发语言,因此对于需要处理复杂业务逻辑和大规模的系统开发来说,Java仍然是一个非常好的选择。 综上所述,Golang 和 Java 都是非常优秀的编程语言,适用于不同的应用场景和需求。因此,取代 Java 的可能性并不是很大,但在某些场景下,Golang 可以成为一个更好的选择。 ### 回答2: 个人认为,Golang语言有一定的潜力可以取代Java语言,但要完全取代还需要时间和努力。 首先,Golang语言在并发处理方面有着出色的表现。它内置了轻量级的协程机制(goroutine)和高效的通信手段(channel),使得并发编程变得更加简单和高效。相比之下,Java语言在并发处理方面相对较为复杂,需要使用线程和锁等机制,编写起来更为繁琐。 其次,Golang语言的编译速度非常快。由于其编译器的设计和优化,Golang语言在编译时能够快速生成可执行文件。而Java语言则需要先将源代码编译成中间字节码,再由JVM解释执行,导致了启动速度较慢的问题。 另外,Golang语言拥有丰富的依赖管理工具和包管理器,使得开发者可以方便地引用和管理第三方库。相对而言,Java语言在依赖管理方面稍显复杂,需要手动导入所需的jar包。 然而,Java语言作为一门非常成熟和广泛应用的语言,拥有庞大的生态系统和大量的开发者社区。与此相比,Golang语言的生态系统还相对较小,尤其在某些领域还没有丰富的库和框架支持。这也限制了Golang语言在某些大型项目和企业中的应用。 综上所述,虽然Golang语言具有一定的优势可以取代Java语言,但要完全取代还需要充分发展其生态系统,并争取更多的开发者支持。未来的发展趋势将会决定这两种语言的竞争格局。 ### 回答3: 我认为Golang(Go语言)在某些方面可以取代Java语言,但在其他方面可能无法完全取代。 首先,Golang具有出色的性能和并发处理能力。它使用了一种称为goroutine的轻量级线程,可以轻松地处理大规模并发任务。相比之下,Java的线程模型相对较重,处理大并发可能需要更多的系统资源。 其次,Golang的语法简洁且易于学习。它舍弃了Java中冗长的代码和复杂的继承体系,使得编写和阅读代码更为容易。此外,Golang还内置了垃圾回收机制,减轻了开发人员的负担。 但是,Java在许多领域仍具有重要的地位。首先,Java拥有广泛的应用领域和丰富的开发工具生态系统。很多大型企业和机构在其核心系统中依赖于Java,而且Java也有大量的开源库和框架可以使用。 其次,Java有成熟的企业级开发支持。Java提供了各种企业级框架(如Spring)和标准(如Java EE),可以轻松开发和管理复杂的企业级应用程序。此外,Java还有强大的面向对象编程能力和丰富的第三方库支持。 综上所述,虽然Golang在性能和语法上具有优势,但Java仍在许多领域中占据主导地位。尽管Golang的发展迅速,它可能无法完全取代Java,但在某些特定领域和项目中,Golang可能更适合解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值