程序员老鬼

用Java被用go的鄙视了,说什么臃肿效率低……

昨天晚上十二点多,还在公司楼下跟小王抽烟,结果他突然来一句,“你们Java现在是不是都被Go吊打了?我看Go效率高啊,写起来也清爽,一堆Java开发不都被Go嘲笑臃肿低效嘛?”我当时就差点笑出声,关键还带着点挑衅——典型的Go新贵心态。

Image

其实这个话题啊,真的,不是第一次听了。你说Java臃肿、效率低?是有那么点意思,但也真没那么绝对,很多人就是一上来if err != nil,感觉全世界都该按这套来了。你要真说性能,Go的启动、资源占用这些确实挺香,写一些并发的东西也省心。但你真要说大型业务、系统的稳定性和生态,Java那底子,老哥们还是心里有数的吧。

就拿一个最普通的Web服务来说,很多Go新手一上来写,确实几行代码能跑起来:

if err != nil {
// 处理错误
}

对吧,一天到晚if err != nil,网上都说Go代码清晰简洁,但真落到复杂业务上,错误传递、依赖注入、日志、治理啥的,别说优雅,最后还是一堆if堆着。Java虽然写着啰嗦点,但是像Spring这种生态,用了十几年,分层清晰、AOP拦截、事务、链路追踪啥都有,出了bug排查起来也有一堆现成工具,真的不是吹牛。

而且,Java代码现在新点的写法其实也没多臃肿。你比如说异常捕获,虽然try-catch块比较多,但有时候就是要分情况处理。Go嘛,就是把错误一层一层return,靠调用方盯着,个人觉得这也不是啥优雅的事儿。

你要真说性能,Java也不是天生慢。像JIT、GC这些,JVM玩的花活多了,写得好照样飞。我们之前搞高并发场景,用Netty加上异步处理,一秒钟扛几万QPS,根本不虚。而且调优工具全,遇到瓶颈,直接用Arthas在线诊断,改代码都不用重启,Go现在想玩这套生态,还是早着点。

try {
// 某些操作
} catch (Exception e) {
// 错误处理
}

就这段,很多Go粉觉得啰嗦。但我跟你说,有时候清楚地知道哪里出错了、为啥错的,比啥都强。Go那套error,如果你没带堆栈,真线上出大事,你就慢慢trace吧,还是得靠打日志。

还有人说,Java部署起来麻烦,要装JVM,包又大。可是现在Spring Boot出来后,一个jar包直接丢上服务器就能跑,哪里还像以前那样折腾?真要卷,Go也得静态编译一堆东西,遇到依赖库版本冲突,照样头大。

最搞笑的是,Go新手爱用的“轻量”,其实真做大业务,Go项目照样能写成一锅粥,重复轮子多到你头晕。Java这边虽然老,但是IDE工具、测试、集成、治理全套,哪怕不潮,胜在靠谱。你们说是不是? 我见过写Go写得好的一堆Java老哥,说白了,语言不是核心,关键还是看怎么写、怎么用。Go和Java各有场景,你真要做游戏服务器、网络代理,Go挺香;但你要业务复杂、生态依赖重,Java不香才怪。

对了,刚才小李也插了一句,说以后去面试,如果面试官看到你写“if err != nil”那一堆,八成知道你干过Go。其实我倒觉得,工具只是工具,别太迷信技术圈的那点鄙视链,谁也别把自己搞得太高级,好用才是真的。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

最后给大家分享一份不错的副业资料,点击下方公众号,回复关键字: 副业 领取,也可以链接我领取,微信:hls404