头条号码认证了几年了一直没有怎么发表文章,从今天开始准备多多写写文章或视频了。
最近开发项目遇到一些纠结的问题,最主要的问题就是语言的选择。今天这篇文章我就从以下几个方面来说说 Nodejs 和Goalng。也算是给想入门或者已经入门NodeJs和Golang的朋友一些方向指明吧。
一、语言生态
1.1 库
目前来说NodeJs略胜Golang,目前Golang上升的很快,很快就会赶上NodeJs。但是Golang的标准库比NodeJs更加好。
1.2 社区
这方面两者不相上下。
1.3 场景
NodeJs更多的作为前端、 中间件 、快速迭代API, IO 密集等一个需要快速上线或迭代项目的方面,Golang更多的作为后台服务、中间件、日志、大数据处理、IO/CPU密集等一些调度或基础服务方面。
二、举例说明[电商平台]
2.1 需求
.卖家能够编辑、上传宝贝,每日/周/月历史访客;
.能够给买家推荐最近浏览相关产品、已经用户收藏的相关产品;
.结算系统、聊天系统
以上只是一些简单的要求,一个真正的电商平台项目比这复杂很多。
2.2 项目实施
项目组噼里啪啦~几个小时的详细讨论,大致的就是需要前端、中间件、后台服务;
2.3 前端
直接用NodeJs开发前台和后台的页面,这个目前没有语言可以替代。如果要强行自己撸js+css+html的话,当我没说。
2.4 后台服务/基础服务
用Golang作为数据库的CRUD的基础服务,数据库只能特定的内网机器直接访问操作,所以需要一个提供一个其他服务器或者外网能够访问的服务。用Golang作为聊天系统和结算系统的基础服务。因为是网页应用所以,聊天系统直接用webscoket来做。结算系统涉及到金融方面所以用Golang这种强类型语言来做是最保险的一种选择,一面数据精度丢失。
2.5 中间件
至于这一块其实就是我在开发中最纠结的一个地方,因为Golang和NodeJs两门语言就开发效率来说都是很高的,为什么要说开发效率,因为中间件这一块的大多数服务都是会根据业务来变动。基础服务的话基本写好了几乎不会去变动了。
2.5.1 API接口
这个方面用需要细分一下:
1)提供给前端API
主要是前台和后台调用的http/https、webscoket服务接口,直接暴露给公网的。
这方面用NodeJs来做是相对优化的选择,http/https的服务接口肯定是会经常变动的。
2)内部调用API
如过 整个项目使用分布式,那么就需要相对比较多的内部调用API,这些API可能是http服务接口也有可能是 TCP 服务/ rpc 之类的。如果只是http服务,用NodeJs是最优化的选择。TCP服务的话就不要犹豫了直接上Golang了。
3) 缓存 、 CDN 、日志、数据分析
缓存、日志、CDN、数据分析用Golang是最优化的选择、用Golang你可以自己实现一套key/value的缓存组件,而且非常简单。当然你直接用Redis做部分缓存业务也是可以的。日志和数据分析的话,需要实时分析,Golang这种编译性语言更适合做此类工作。虽然Python在数据分析上面有更多的库可以调用,但是从速度效率上确实不是很好的选择。CDN方面其实大多数IDC已经为你做好了,你要自己实现建议共Golang。
三、结尾
上面说的并不是面面俱到,只是简单的一些应用场景。具体的还要看团队和项目方面、如果团队方面技术储备很多,可以NodeJs和Golang一起上。如果前端较多那就直接用NodeJs、开始也提到过NodeJs适用于IO密集的方面,所以缓存、日志、数据分析直接用NodeJs也是可以的。如果团队后端储备比较多,同时又想尝试新的东西,Golang是目前最好的选择。无论是快速迭代的API接口还是微服务/分布式/集群,还是需要实时通信很高的游戏服务Golang都能胜任。当然WEB前端的话NodeJs目前是没有可以替代的。现在的前端也叫做大前端,也就是说,你不单单要会页面上的,你也需要后端的知识面。除了大厂是把前端后端分开的,其他大多数公司招NodeJs的时候并不是单纯的招一个前端,更多的是后端处理。Golang的要求就更多了。其实无论你现在在学习NodeJs也好还是Golang也好,你对于整个项目的架构都要有一定的了解。最好你能够自己做一个相对成规模的项目。总体来说,编程语言的选择只是一方面,更多的是你对这个行业或者一个项目的认知。就好比现在大多数打工租房一族来说,房子是租来的,但是生活是自己的。如果一定要说现在学习什么语言最有潜力,Golang是之一,NodeJs在web应用依旧大放光彩。Golang也可以开发web,但是有一个语言切换的成本。我还是比较喜欢用NodeJs全部打通,毕竟人生苦短。