朋友:“大佬,有时间吗,最近有Java转Go的机会,想了解一下go。”
我:“想了解什么呢?”
朋友:“想了解下go 现在做后端的基建是不是没有Java丰富呀,你写起来有没有经常吐槽的地方?”
朋友:“主观一些都没关系,前景啥的应该不会比Java差太多吧,看到好多公司也慢慢开始招了。”
我:“我能给你做基础研发方向的意见,做业务的话,这个我也不了解。”
【云原生基础研发方向】
云原生是未来的趋势,就像AI是未来趋势一样,这个是可以确定的。
目前go是云原生基础研发方向的唯一语言,因为k8s已经成了云原生的基础,成了标准,而k8s是用go开发的,k8s的生态都只能是go语言开发。
在云原生基础研发方向,目前只有go一种语言发光发亮!
【中间件方向】
目前中间件也在向云原生靠拢,像Tidb这类新的中间件,都是云原生中间件,也基本都是go语言开发的。
也越来越多的中间件使用go语言了,比如百度开源的bfe。
go语言在性能方面会比java好,毫无疑问,未来中间件的趋势也是使用go语言,或者其它语言,但不会是Java。
朋友:“确实是,看到boss上好多云原生相关的都是go。所以我才比较倾向转GO。”
我:“Java其实在云原生有劣势,Java写的服务很难用上Serverless的优势,Java开发的项目耗资源也会导致成本方面不好看。”
朋友:“嗯嗯,现在又在逐渐去微服务化,感觉Java的前景有限了。他的优势只是在生态和市场存量项目。”
我:“没有去微服务化哦,微服务架构也是云原生的关键特征之一。”
“他的优势只是在生态和市场存量项目”,这个没毛病,而且大量还是停留在Java 8。而在国外,早已是百花齐放。
要说Go语言写起来有没有经常吐槽的地方,确实有,那就是if err:=xxx;err!=nil 。但其实java也有吐槽的地方,例如:bean非要生成一堆get、set(当然,可以借助idea插件或者lombok),异步需要创建线程池还要考虑线程池应该配置多大合适。
网上也有人拿go和java开发一个crud的web项目做对比,看哪个效率更高。
但其实看了对比结果,Java借助Spring boot略胜,但差别也不大。
我的建议,不是选Java还是选Go,小孩子才做选择题,全都要就是了。
做后台开发,不管是java还是go,都只是一门编程语言罢了,不会说做了5年的java后端研发,换成go就不会了吧,顶多花点时间学习一门语言和一些框架,把编码习惯变一变而已,在问题排查方面,需要重新学习一些工具而已。
我不相信,你能找到java内存泄露问题,却找不出go内存泄露问题。
我不相信,你能用java造一个中间件,却用go造不出来。
我不相信,你能用java写crud,却用go写不出来。