Go 语言是谷歌的,而非社区的

阅读数:14374 2019 年 6 月 13 日

我在 Twitter 上面看到这样的一个问题:

有很多人讨论 Go 的泛型,为什么我们不能有一个类似于 Java OpenJDK 那样的东西,比如叫作 OpenGo,社区成员可以自己实现泛型,而不是一直等待官方推出泛型。

对于这个问题,有很多人作了回答,但有一个真实的声音没有被直接表达出来,那就是:Go 是谷歌的编程语言,而不是社区的。

当然,很多社区成员为 Go 语言贡献了很多重要并且有价值的东西,这些从贡献者和提交者的多样性就可以看出来。但谷歌作为整个 Go 社区的守门人,它独自决定什么东西可以被 Go 语言接受,什么不能被接受。即使社区有一套流程来决定什么东西可以被加入到 Go 语言中,但不要忘了房间里还有一头八百磅重的大猩猩。只要是谷歌反对的东西,没有人可以让它们加入到 Go 语言中。同样的,如果谷歌决定要把什么东西加入到 Go 语言中,那是势在必行的。

最为明显的一个例子就是在 Go 语言模块系统上发生的一件事情,谷歌 Go 语言核心团队的一名成员放弃了由外部 Go 社区开发的一个模块系统,因为它使用了另一种不同的模型。可以通过这里查看相关的历史。

简单来说,Go 语言拥有一个贡献者社区,但是它并不是一个社区项目,而是谷歌的一个项目。无论你认为这是好事还是坏事,它都是一个不争的事实,我们需要接受这个事实。如果你认为有一些重要的东西可以加入到 Go 语言中,那么说服 Go 语言核心团队比努力在社区中达成共识来得更有效。

贡献者将大量的时间和精力投入到社区当中,但如果 Go 语言核心团队不买账,就是在浪费时间。最好的结果也不过是让 Go 语言核心团队对这些问题了解得更深入。

一般来说,社区的声音对于 Go 语言的发展来说并不是十分重要,而我们这些谷歌墙外人,只要接受这样的事实就对了。如果足够幸运的话,我们想要的东西正好与谷歌想要的东西契合,谷歌和 Go 语言核心开发团队就会更加关注这些东西,并及时进行相关的工作。好在谷歌和 Go 语言核心团队也比较关心 Go 语言在业界成功与否,所以他们愿意付出代价解决痛点。

不管怎样,Go 语言表现得挺好,它有一个不大的核心团队,这个团队对于这门编程语言有着良好的品味和愿景,但他们听不进外界的声音,缓慢前行,不太愿意拥抱变化。

我喜欢 Go 语言已经有一段时间了,对 Go 语言的演变和 Go 语言核心团队的管理能力基本上感到满意。我认为慢一点推出泛型功能并不是件坏事,但 Go 语言模块系统事件却给我留下了不好的印象,我似乎有点后悔成为 Go 语言贡献者的一员,哪怕只是一些小的改动我也并不乐意(换句话说,我不想成为“二等公民”)。如果发现 bug,我会继续提交 bug 报告,但也仅限于此。

Go 语言的团队声称他们比较关心整个社区,并且希望更多的人参与进来,这种论调让我感觉很可笑。我不否认他们关心社区,但只关心某些特定的方面。我觉得 Go 语言团队与其暗中做小动作,不如坦诚布公地面对这种状况。

谷歌和 Go 语言核心团队

你可能会问,Go 语言到底是谷歌的还是 Go 语言核心团队的。虽然说 Go 语言的一些方向是由核心团队设定的,但核心团队的大部分或者全部成员都是谷歌的员工,所以在实际当中不可能分得很清楚。如果 Go 语言核心团队都离开了谷歌,并积极确立 Go 语言未来的发展方向,那我们或许可以说清楚 Go 语言到底属于谁。如果这件事情真的发生了的话,特别是大多数人不再为谷歌工作,那么 Go 语言就有可能属于这个团队。就像 Python 一样,不论 Guido van Rossum 为谁工作,Python 一直都是他的编程语言。

在实际当中,不能否认的是,谷歌为 Go 语言提供了大量的基础设施和资源,例如域名 golang.org 等,而且 Go 语言的商标同样也在谷歌的商标列表里面。

英文原文:
https://utcc.utoronto.ca/~cks/space/blog/programming/GoIsGooglesLanguage


对于 Go 属于谷歌还是社区,InfoQ 发起了一个讨论,欢迎去这里留言。我们将选出三位精彩评论者,送上“InfoQ 限量版定制 T 恤”一件或《Go 语言实战》一本。(活动时间:即日起至 6 月 24 日零点,感谢人民邮电出版社赞助书籍)

延伸阅读:
用 Go 语言进行编程的利与弊
Go 会接替 Java,成为下一个企业级编程语言吗?
我是如何把 5 万行 C++ 代码移植到 Go 的?
使用 Python 5 年后,我转向了 Go
再见,Python!你好,Go 语言
舍弃 Python,为什么知乎选用 Go 重构推荐系统?

收藏

评论

微博

发表评论

注册/登录 InfoQ 发表评论

最新评论

TERRY.ROD 2019 年 06 月 17 日 00:47 1 回复
感觉标题过于片面了,实际上Go1中最被吐槽的3个点:范型、包版本依赖、错误处理,目前后两者都基本得到解决,范型部分,也在Go2提案中涉及。。。 了解过Go依赖包发展过程就知道为什么是现在的结果了。go mod的确和之前google提出的vgo是一脉相承的,是对之前错综复杂的go依赖包管理(主流的makefile、godep、glide、vendor、vgo到go mod),缺失统一和标准化,这点毋庸置疑的是伟大的。 我之前在学习GoModule的过程中的简单梳理:https://tkstorm.com/posts-list/programming/go/go-packages-manage/ 也简单介绍了Go依赖包的的一些衍进过程。 另外,在Go2中,开发团队在博文中有具体提到“Go 1和Go 2的主要区别在于谁将影响设计以及如何做出决策。Go 1是一个小团队的努力,具有适度的外部影响力; Go 2将更加受社区驱动。”,我觉得Google的Go应该会走向更加开化而不是封闭。
展开全部
Geek_4c672b 2019 年 06 月 14 日 15:00 0 回复
这样挺好的 不然 社区提供建议 然后决定权在Google 这样才不会因为舆论而走偏
小斌斌 2019 年 06 月 13 日 22:54 1 回复
鸟社区 体现民主自由 又如何 我们要的是科学真理 Go就算是Google的 又如何呢
0xbeef 2019 年 06 月 13 日 18:00 1 回复
Go 不管是 Google 的还是社区的,首先它是开源的;就跟 Node.js 一样,之前是 Joyent 主导的,但社区只要你 NB,完全可以抛弃官方自己单独 Fork 一份带领着大家玩,而且应该大家是很乐意的,官方最后还不得不接受这个事实;
杨军 2019 年 06 月 13 日 16:42 2 回复
这个论调大有问题了,go别人做出来的,你有能力完全可以做一个更了不起的出来,fork也可以,别搞得像个怨妇似的. go team确实有个性,但是那确实是人家生的孩子,别人喜欢怎么喂养和管教,这个还是有决定权的, 从目前来看,他们还是有一套的,以go team的规格,不鸟社区很多人实在太正常了
陈康 2019 年 06 月 13 日 15:19 0 回复
跟. net是微软的没啥区别。社区当然很重要,但是社区也是由人组成的,拍板权还是在于人,就会有私利存在。反过来说,go没有谷歌的背书,社区能发展饭今天?
Geek_d889d4 2019 年 06 月 13 日 11:52 1 回复
一方面抱怨C++泛型的难用,另一方面指责go语言不提供泛型。。。。
永远无法满足所有人,应该权衡忽略掉一些 0 回复
没有更多了