写点什么

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

  • 2019 年 6 月 13 日
  • 本文字数:1720 字

    阅读完需:约 6 分钟

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

我在 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 重构推荐系统?


2019 年 6 月 13 日 11:4816135

评论 8 条评论

发布
用户头像
感觉标题过于片面了,实际上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应该会走向更加开化而不是封闭。
展开
2019 年 06 月 17 日 00:47
回复
用户头像
这样挺好的 不然 社区提供建议 然后决定权在Google 这样才不会因为舆论而走偏
2019 年 06 月 14 日 15:00
回复
用户头像
鸟社区 体现民主自由 又如何 我们要的是科学真理
Go就算是Google的 又如何呢
2019 年 06 月 13 日 22:54
回复
用户头像
Go 不管是 Google 的还是社区的,首先它是开源的;就跟 Node.js 一样,之前是 Joyent 主导的,但社区只要你 NB,完全可以抛弃官方自己单独 Fork 一份带领着大家玩,而且应该大家是很乐意的,官方最后还不得不接受这个事实;
2019 年 06 月 13 日 18:00
回复
用户头像
这个论调大有问题了,go别人做出来的,你有能力完全可以做一个更了不起的出来,fork也可以,别搞得像个怨妇似的.
go team确实有个性,但是那确实是人家生的孩子,别人喜欢怎么喂养和管教,这个还是有决定权的, 从目前来看,他们还是有一套的,以go team的规格,不鸟社区很多人实在太正常了
2019 年 06 月 13 日 16:42
回复
用户头像
跟. net是微软的没啥区别。社区当然很重要,但是社区也是由人组成的,拍板权还是在于人,就会有私利存在。反过来说,go没有谷歌的背书,社区能发展饭今天?
2019 年 06 月 13 日 15:19
回复
用户头像
一方面抱怨C++泛型的难用,另一方面指责go语言不提供泛型。。。。
2019 年 06 月 13 日 11:52
回复
永远无法满足所有人,应该权衡忽略掉一些
2019 年 06 月 13 日 16:09
回复
没有更多了
发现更多内容

异地多活知识总结

十二万伏特皮卡丘

2021Android岗面试题知识点小结,Android程序员必看

android 面试 移动开发

2021Android常见笔试题,字节面试官

android 面试 移动开发

初识Vue

贝壳漂流记

大前端 vue2

2021Android者真的太难了,大专生三面蚂蚁金服

android 面试 移动开发

带你掌握Vue过滤器filters及时间戳转换

华为云开发者社区

JavaScript Vue 过滤器 时间戳 filters

2021Android进阶者的新篇章,移动开发框架

android 面试 移动开发

10天用Flutter撸了个高仿携程App,薪资翻倍

android 面试 移动开发

1307页字节跳动Android面试全套真题解析火了,阿里P8大牛亲自教你

android 面试 移动开发

Vue响应式探究

贝壳漂流记

Vue 大前端 vue2

2021Android常见面试题分享,年薪50W

android 面试 移动开发

关于一场甲乙双方争议的思考

boshi

创业 项目管理

2021Android大厂面试真题,2021Android面试心得

android 面试 移动开发

Linux IPTables:如何添加防火墙规则

华为云开发者社区

Linux 防火墙 iptables 数据包 防火墙规则

2021Android开发现状分析,爆火的Android面试题

android 面试

深入剖析RocketMQ源码-NameServer

vivo互联网技术

RocketMQ 服务器 java; NameServer

2021Android最新大厂面试真题总结,app架构师

android 面试 移动开发

12年高级工程师的“飞升之路”,进阶学习资料

android 面试 移动开发

2019-2021历年阿里Android面试真题,面试杀手锏

android 面试 移动开发

kafka集群迁移实践

小江

kafka 迁移 消息队列

2021Android最新大厂面试真题总结,震撼发布

android 面试 移动开发

2021Android进阶者的新篇章,已开源

android 面试 移动开发

12个View绘制流程高频面试题,膜拜大牛

android 面试 移动开发

2021Android最新大厂面试真题总结,给大家安排上

android 面试 移动开发

10天拿到阿里Android岗offer,面试必知必会

android 面试 移动开发

2020-2021华为Android面试真题,大厂内部资料

android 面试 移动开发

Groovy参数默认值在接口测试中应用

FunTester

接口测试 Groovy FunTester 参数默认值 重载

小学生都能读懂的网络协议之:WebSocket

程序那些事

网络协议 HTTP 程序那些事 webscoket

2019-2021历年字节跳动Android面试真题解析,字节跳动高工面试

android 面试 移动开发

2020-2021阿里巴巴安卓面试真题解析,2021最新版

android 面试 移动开发

2021Android开发面试解答之设计模式,食堂大妈看完都学会了

android 面试 移动开发

React Native 核心原理及跨端选型思路

React Native 核心原理及跨端选型思路

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