Go 为什么能火?归功于这 5 个方面

日报狂魔
• 阅读 10300

大家好,我是煎鱼。

在国外的播客节目 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/blog 已收录,学习 Go 语言可以看 Go 学习地图和路线,欢迎 Star 催更。

Go 图书系列

推荐阅读

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
8个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Stella981 Stella981
3年前
Linux日志安全分析技巧
0x00前言我正在整理一个项目,收集和汇总了一些应急响应案例(不断更新中)。GitHub地址:https://github.com/Bypass007/EmergencyResponseNotes本文主要介绍Linux日志分析的技巧,更多详细信息请访问Github地址,欢迎Star。0x01日志简介Lin
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这