Go 创始人谈话节目: 语言的成功归功于这 5 个方面

2023-10-15 03:40

本文主要是介绍Go 创始人谈话节目: 语言的成功归功于这 5 个方面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

如果你想创造一门成功的编程语言,向已经做到的人学习是非常有价值的。

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

0. 说明

Rob Pike(下称:Rob)将 Go 的成功归为了 5 个方面,在主持人 @Jerod Santo 的分享下形成了这篇《5 things Rob Pike attributes Go's success to[1]》文章,与播客的内容相对应。

目录如下:

  • 他们写了一份正式的规范。

  • 他们吸引了杀手级应用。

  • 他们启动了一个开源社区。

  • 他们使语言难以改变。

  • 他们坚持使用他们相信的功能。

1. 他们写了一份正式的规范

在介绍 Go 项目的起源时,Rob:

" 这就是规范发生的时候。是的,几个星期。所以我们真的开始了六个月左右的头脑风暴和近似塑造。

我们做的第一件重要的事情——也许是我们做的第一件重要的事情 —— 是我们编写了语言的正式规范,我认为这是项目成功的关键部分

其中最重要的事情之一是 Ian Taylor 也在 Google,看到了规范,并决定为它编写一个编译器。

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

理所当然,他成为了 Go团队的一员,现在仍在研究 Go。"

主持人:“该规范最初引起了 Ian Lance Taylor 等工程师同事的兴趣”。

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

不幸的是,Rob 并没有说明他们早期是如何吸引 Docker 的。我猜,通过使语言……对程序员有吸引力?🤷‍♂️

Rob:“ 是的,Docker 是我们的杀手级应用程序,因为它是用 Go 编写的,运行良好,并且成为现在所谓的云计算的核心……我们过去只称其为系统编程或服务器。

其中一项关键技术是用 Go 编写的,这一事实证明了该语言对很多人的目的是正确的……而且我认为它实际上是一种非常好的语言。

这正是我们在将语言放在一起时正在考虑的事情,尽管我们自己并没有这样做。Kubernetes 是另外出现的,其诞生来自谷歌。但是,拥有用你的语言编写的重要软件是用一种语言取得成功的一个非常重要的部分

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

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

Rob 坦率地谈到了他们在开源世界中面临的挑战,这令人耳目一新。

Rob:" 我确实认为团队并没有真正准备好与开源社区互动以及这意味着什么。Ian 是我们当中唯一一个在开源世界中花费大量时间的人,他所做的超出了他在社区工作中应有的份额。

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

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

当有成千上万的人使用你的编程语言时,这是一件非常具有挑战性的事情,而现在它被认为是世界上数百万的 Go 程序员。他们对这件事都有自己的看法,以及如何倾听,但也要确保你保持项目的灵魂正确 —— 我认为没有任何简单的答案。

我认为很多人认为这是微不足道的,你只是接受了每个人都想要的东西......但是你不会有 Go,你会拥有完全不同的东西。这真的很棘手,这是一个非常困难的平衡行为。"

4. 他们使语言难以改变

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

Rob:“好吧,我们很难改变。我们特意为 Go 1 写下了我们承诺不会改变任何东西。这对语言的成功至关重要,因为它使企业能够相信我们正在做的、依赖我们的 Go,并不会破坏他们的东西……这使得做出改变变得更加困难。我认为很多人不欣赏我们对这份合同的热情相信。

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

煎鱼:“这里指的是 Go1 兼容性保障,产生了很大的意义。

5. 他们坚持使用他们相信的功能

当 Jon Calhoun 询问社区反馈以及团队对变革的抵制如何与之抗衡时。

Rob:"Go 的某些功能对其成功很重要,但人们并不喜欢,我们对此非常直言不讳

我认为您提到的未使用变量的编译错误就是其中之一。这很烦人 —— 你忘记删除一个未使用的变量,你的程序就会无法编译。但对我们来说,这是我们试图讲述的故事的一部分,也就是:编写一种尽可能保证更好代码质量的语言,即使我们无法阻止你编写糟糕的代码……但我们可以确保不会让你的构建速度变慢或代码更难维护的事情发生。

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

然后 Brad 写了一个叫做 goimports 的东西,它是 gofmt 的一个变种,可以为你管理导入,这几乎消除了这类抱怨。

通常情况下,自动化可以解决很多抱怨。"

推荐阅读

  • goto 语句让 Go 代码变成意大利面条?

  • 太疯狂了,Go 程序说 nil 不是 nil...

参考资料

[1]

5 things Rob Pike attributes Go's success to: https://changelog.com/posts/5-things-rob-pike-attributes-to-gos-success

关注和加煎鱼微信,

获取一手业内消息和知识,拉你进交流群👇

bb7ff69785d5b7bdb17da468bca4a893.png

- END -

扫码关注公众号「网管叨bi叨」

给网管个星标,第一时间吸我的知识 👆

网管整理了一本《Go 开发参考书》收集了70多条开发实践。去公众号回复【gocookbook】领取!还有一本《k8s 入门实践》讲解了常用软件在K8s上的部署过程,公众号回复【k8s】即可领取!

觉得有用就点个在看  👇👇👇

这篇关于Go 创始人谈话节目: 语言的成功归功于这 5 个方面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/215116

相关文章

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件