缘起
最近在知乎上看到了下面这个问题,说用Go写Web或者叫写业务系统不爽。但为啥还这么多人用。
img
这位网友只说对了一半,因为不管用什么编程语言写业务都不爽,不如当产品经理出需求爽。刚开始觉得好好的项目让产品经理给你出几轮需求、要是再加上工期紧、同事代码规范不好,过不了俩月...结果大家就都能想到了。
说回“用Go做Web开发不爽,但是还这么多人用这件事本身”,存在即合理,为什么觉得写Go代码不爽?为什么它又能流行起来?可能是由下面这些因素造成的。
语法简陋但有利于控制预算
现在版本的Go的语法糖仍然不多,也就是说甭管你是精通rust的花式体操大佬,还是精通Java的设计模式狂热爱好者,又或是一个文件写五千行的梭哈大师,用Go写出来的代码没啥大的区别,技术再牛逼,语言层面不让你玩大的花样,连代码格式在编译的时候都给你规定好,实际做过项目的都懂,这是有利于多人协作下的工程化的。
因为做项目不是让你炫技,稳定傻瓜易维护才是最终目的。另外Go在web当中还没有出现Java里Spring这种航空母舰般的Web框架,这样带来的好处是学习成本低,培养人的成本也低,当然了,换人的成本也低,不过这点我感觉有点牵强,如果是Java程序员,因为教程、规范、社区太过完整,相当于市场就能帮你培养出像一个模子里出来的工程师来,换人的成本也低。
Go另外的一个优点是资源占用率低,这一点应该是公司老板喜欢,相信在现在的市场环境下,不少技术负责人每个季度的OKR一定是有减少服务器预算这项KPI的。如果公司大规模使用微服务配合k8s,那么使用Go在资源占用上,尤其是内存占用上降低的数量是肉眼可见的。
Go 也在倒逼其他语言进步
另外说到Web开发就不能不提Java,Java这边如果用Springcloud,就是页面显示个hello world在不修改默认gc情况下,内存占用也得小一个G,另外还有时不时被人提起的java中直接使用多线程,线程切换消耗资源大,需要用线程池,或者使用netty等框架解决,针对这些问题,java社区也在不断改进,19的虚拟线程,还有新的框架Quarkus,spring航母新的型号spring native,新的虚拟机GraalVM等,这些其实都是因为受到Go的刺激进而衍生出来的东西,毕竟有竞争才有成长。
另外Java为啥到现在还活着,而且看起来活的还不错,除了历史项目原因,大数据普遍使用Java以外,其中还有个原因就是目前的go真的不适合大型单体web应用,还有就是一些复杂的业务逻辑用Go写就是比用其他语言写起来啰嗦。
单体大应用Go的优势不明显
Go做云原生或者微服务非常好,但是你要是弄个非常复杂的单体web应用还用Go,那酸爽体验绝对起飞。这里边原因也不展开说了,懂的都懂,另外有不少中小公司其实是单体式微服务。研发人员较多的公司,一般内部竞争为了能吹水卖更多的钱,或者是提高技术身价,不管这项目多大,能用多久,有多少用户用,就为了微服务而微服务,空降了成本却没有带来战略或者战术收益,这种的切换Go并不能得到收益。
但是,小公司往往更重视成本,最好是一个人的钱干两个人的活,一台服务器能跑一百个服务才好,所以也有些小公司在尝试用Go,但是往往又被人力成本,或者社区的基础设施打击进而转Java,PHP,Python,毕竟大厂就那么几家,全国范围内九成以上的公司,没有能力自研一套完整的微服务设施,五成到六成左右的公司,不具备对核心中间件大规模二开的能力,而且大部分中小型公司目的都是接项目做完了卖钱,而不是为了研发中间件。
总结
总而言之,Go在Web,尤其是云原生方向肯定会逐步增长,但是感觉在十年内,Web开发用到的语言还是会呈现多驾马车齐头并进的趋势,不会出现只有a,没有bcd的情况。一个技术能给自己公司降低成本就一定会被尝试,反之就不会。
- END -