大家好,我是煎鱼。

在国外的播客节目 Go Time #100 中,Rob Pike 和 Robert Griesemer(Go 的两位创始人)和主持人 Jerod Santo 讨论了 Go 言语的成功缘由和一些考虑。

假如你想创造一门成功的编程言语,向现已做到的人学习对错常有价值的。

欢迎对 Go 感兴趣的小伙伴一起围观!

0. 阐明

Rob Pike 将其归为了 5 个方面,在主持人 @Jerod Santo 的共享下形成了这篇《5 things Rob Pike attributes Go’s success to》文章,与播客的内容相对应。

目录如下:

  • 他们写了一份正式的标准。
  • 他们招引了杀手级应用。
  • 他们启动了一个开源社区
  • 他们使言语难以改动。
  • 他们坚持运用他们信任的功用。

1. 他们写了一份正式的标准

在介绍 Go 项意图来历时,Rob 说:


但这便是标准产生的时候。 是的,几个星期。 所以咱们真的开始了六个月左右的脑筋风暴和近似刻画。

咱们做的第一件重要的工作——也许是咱们做的第一件重要的工作 —— 是咱们编写了言语的正式标准,我以为这是项目成功的要害部分

其间最重要的工作之一是 Ian Taylor 也在 Google,看到了标准,并决定为它编写一个编译器。

有一天他走进咱们的办公室说:“哦,顺便说一句,我现已为你的言语编写了一个编译器。” 那对咱们来说是一个了不起的时间。

当然,他成为了团队的一员,现在他仍在研讨 Go。

该标准开始引起了 Ian Lance Taylor 等工程师搭档的兴趣。

2. 他们招引了杀手级应用

不幸的是,Rob 并没有阐明他们前期是怎么招引 Docker 的。 我猜,经过使言语……对程序员有招引力? ‍♂️


是的,Docker 是咱们的杀手级应用程序,由于它是用 Go 编写的,运转良好,并且成为现在所谓的云核算的核心……咱们过去只称其为体系编程或服务器。

其间一项要害技术是用 Go 编写的,这一事实证明了该言语对许多人的意图是正确的……并且我以为它实践上是一种十分好的言语。 这正是咱们在将言语放在一起时正在考虑的工作,尽管咱们自己并没有这样做。

后来 Kubernetes 是别的呈现的,其诞生来自谷歌。 但是,具有用你的言语编写的重要软件是用一种言语取得成功的一个十分重要的部分

假如什么都没有写,那么言语有多好并不重要。

3. 他们启动了一个开源社区

Rob 坦率地谈到了他们在开源国际中面对的应战,这令人耳目一新。


我的确以为团队并没有真实准备好与开源社区互动以及这意味着什么。 Ian 是咱们傍边仅有一个在开源国际中花费许多时间的人,他所做的超出了他在社区工作中应有的比例。

咱们花了很长时间才理解成为开源社区的一部分意味着什么,具有一个基本上由公司支付的项目,但有许多开源贡献者……咱们实践上有许多很棒的开源发展很早就产生了。 Windows 的移植彻底由外部贡献者完成,这太棒了……社区的投入至关重要。

我以为有时人们以为谷歌操控它太多,这是他们的定见,但我不同意;我以为他们低估了团队对开源社区所说的话、阅览所有问题、处理得很好……有时不是很好,但后来它得到了修复。

当有不计其数的人时,这是一件十分具有应战性的工作,而现在它被以为是国际上数百万的 Go 程序员。他们对这件事都有自己的观点,以及怎么倾听,但也要确保你保持项意图魂灵正确 —— 我以为没有任何简略的答案。

我以为许多人以为这是微乎其微的,你只是接受了每个人都想要的东西……但是你不会有 Go,你会具有彻底不同的东西。这真的很扎手,这是一个十分困难的平衡行为。

4. 他们使言语难以改动

这个一开始有点违反直觉。 通常关于软件,延展性是一种美德,而死板则是一种咒骂。 然而,Rob 很好地解说了为什么不这么做,关于像 Go 这样的编程言语是多么的重要。


好吧,咱们很难改动。 咱们特意为 Go 1 写下了咱们许诺不会改动任何东西。这对言语的成功至关重要,由于它使企业能够信任咱们正在做的、依靠咱们的 Go,并不会损坏他们的东西……这使得做出改动变得愈加困难。 我以为许多人不赏识咱们对这份合同的热情信任。

咱们没有损坏人们的程序,尽管它现在是一个有十年前史的项目。 这只是一个令人难以置信的负担,但让咱们到达现在的位置至关重要

这里指的是 Go1 兼容性保证。

5. 他们坚持运用他们信任的功用

当 Jon Calhoun 问询社区反馈以及团队对革新的抵抗怎么与之抗衡时,Rob 说:


Go 的某些功用对其成功很重要,但人们并不喜爱,咱们对此十分直抒己见

我以为您说到的未运用变量的编译过错便是其间之一。这很烦人 —— 你忘记删去一个未运用的变量,你的程序就会无法编译。但对咱们来说,这是咱们企图叙述的故事的一部分,也便是:编写一种尽可能保证更好代码质量的言语,即便咱们无法阻止你编写糟糕的代码……但咱们能够确保不会让你的构建速度变慢或代码更难保护的工作产生。

我以为真实让人们发疯的是:你不允许导入你不运用的库。这对咱们来说十分重要,由于咱们花了许多时间用许多二进制文件进行缓慢构建,确保程序的依靠项正是您需求的,仅此而已;这对咱们来说十分重要,但对许多人来说,每次你进行编辑并删去打印语句或其他东西时,编译器都会说“你没有运用这个库。我不会再继续编译你了。”

然后 Brad 写了一个叫做 goimports 的东西,它是 gofmt 的一个变种,能够为你办理导入,这简直消除了这类诉苦。

通常情况下,自动化能够解决许多诉苦。

文章继续更新,能够微信搜【脑子进煎鱼了】阅览,本文 GitHub github.com/eddycjy/blo… 已收录,学习 Go 言语能够看 Go 学习地图和路线,欢迎 Star 催更。

Go 图书系列

  • Go 言语入门系列:初探 Go 项目实战
  • Go 言语编程之旅:深化用 Go 做项目
  • Go 言语设计哲学:了解 Go 的为什么和设计考虑
  • Go 言语进阶之旅:进一步深化 Go 源码

引荐阅览

  • goto 语句让 Go 代码变成意大利面条?
  • 太疯狂了,Go 程序说 nil 不是 nil…

本文来历:Go 为什么能火?归功于这 5 个方面