真不一定。golang是语法简洁,但抽象能力和动态能力太弱了,真不适合写业务代码,只适合写技术项目、工具之类的。
业务项目是存在非常多的重复或者通用逻辑的,比如异常处理、响应封装、出入站参数记录、鉴权、权限控制、限流、参数校验、幂等并发控制等等,GO要想将这些公共逻辑抽离出来,使业务代码足够简洁,非常考验编码能力,而且最终也很难抽干净,GO还不支持循环导入,更增加了抽取的难度,这会导致Go写的业务项目里往往存在大量复制粘贴的重复代码,可维护性差。
Java则不同,Java反射、泛型、动态代理(AOP)、SPI、注解、运行时生成/修改类等动态技术可以将非业务逻辑非常干净的抽离出去,可以将这部分沉淀为依赖包,新项目可以很方便复用,沉淀的好,业务开发效率极高。
Go的优势是资源占用少、编译产物小、无虚拟机、原生支持协程,这些确实比Java有优势。
另外Go因为动态能力弱,代码上手门槛会低很多,一个再复杂的项目,跟着代码走基本都能读懂,所见即所得,不会有太多遗漏。
Java则不然,如果没有IDE的提示功能,如果对Java动态能力和Spring体系不够熟悉,可能会漏掉很多隐藏逻辑,运行起来可能完全和预想的不同,上手门槛反而会比较高。