vlambda博客
学习文章列表

开源go-zero作者描述自己从Java到Go语言经历

                   
我写代码已经超过20年了。在使用Go之前,我使用过很多编程语言,包括C、C++、C#、Java。2013年初,我决定学习Go。


我花了一天时间来阅读Go的语法和关键词,又花了几天时间来阅读官方文档和博客。强烈推荐Effective Go 。之后,我开始写一个小的爬虫项目,发现写Go代码非常舒服。

然后我开始用Go重写我们的生产服务,这些服务是用Java和PHP写的。而在2015年,我们所有的生产服务都采用了Go语言。我们有3000多万用户,日活跃用户超过300万。与Java和PHP相比,我们节省了大约50%的服务器/云计算成本。

2018年,我加入了另一家公司,超过5000万用户,约700万日活跃用户。由于大量的服务停机,我决定用Go和我的框架重写服务。我们花了大约5个月的时间,我们得到了比99.99%更好的正常运行时间。此外,我们还开发了一些开发工具,帮助我们提高了工作效率。

所有的框架和工具将在2020年下半年在GitHub上开源。到目前为止,大量的用户和反馈帮助我们改善了很多。在1年半的时间里,有15.6万颗星星和2.2万个分叉。

https://github.com/zeromicro/go-zero

去年,我在github上做了~2k贡献。我还开放了其他一些项目的源代码,所有这些努力对我的技术能力和工作机会都有很大帮助。

其他Reddit网友:

为什么我决定从 Java 转移到 Go 是出于以下考虑:

  1. 我们现有的所有代码都是用 Java 编写的,没有人知道它是如何组织的。当服务器挂起时,每个人都告诉重新启动,大多数问题都没有根本原因。

  2. 我决定重写整个系统,并改用另一种编程语言,以避免从以前的代码库中复制/粘贴。

  3. 我们有数千万用户,服务器成本是 Java 的一个非常重要的问题。

以及其他一些次要的考虑。

回复:我不得不怀疑这其中有多少是由于缺乏对JVM的了解,缺乏适当的调整,缺乏可观察性,等等。

当然,我认为也有Java的错,由于容器化,这一代人更喜欢更简单的运行时,不断地移动(Nodejs,Python,Go coroutines)。

另外,这个故事有多少是公司(或你)"重写了整个系统 "的事实,所以当然现在对你来说更容易理解。下一个人也会是这样吗?Go的生态系统、堆栈痕迹、剖析工具,仅仅是由于年代久远,还没有达到Java的水平。

我在 Go 中的工作效率比在 Java 中要高得多。

我认为不同的人使用不同的语言很好。在 Java 世界工作了 20 年后,我非常确信 Java 中的大多数“最佳实践”与维护和生产力是对立的。但是不可能衡量开发人员的生产力,所以这只是一个基于意见的陈述。

我认为说 Java 是 go 的对立面很有用。我个人的感觉是,Go 程序倾向于只解决手头的问题,并让你的架构不断发展以适应需求。Java,一直到 getter 和 setter 的普遍使用,都是关于通过过度工程来解决明天的问题。

Go 无疑是对 90/00 年代面向对象的膨胀和复杂性的回应,也是对过程化编程的回潮。Java 是对 C/C++ 带来的安全性和开发人员生产力伤痕的回应。它的目标永远不是让你更快地离开地面,而是随着时间的推移提高生产力。

我并不是要否定任何人的经验,我只是很难相信真正的衡量Go 对开发人员的生产力是否更好。当人们开始继承这些遗留的 Go 系统并需要将高度过程化的领域逻辑拼凑在一起时,这些逻辑分布在数十个微服务中。也许它确实是当今系统中更好的工具。但我也倾向于同意 Kelsey Hightower 的观点,即单体很快就会重新流行起来;)。

我的论点是面向对象的语言在较大的代码库中大放异彩,作为一种管理复杂性的工具,过程方法在较小的代码库中变得更具吸引力。随着时间的推移,Granted Go 正在获得更多传统的 OO 支持。