[译]想成为一个出色的Web工程师?学Golang而非Node.js。

原文:medium.com/codezillas/…前端

Nodejs是一个运行时或者说是一个Javascript代码运行时的环境,而Golang是一门编程语言但不只仅用于后端开发。Golang是由Google于2007年发明的。Nodejs能让Javascript代码运行在服务端上,而Golang适用于服务器端编写代码。Nodejs代码也就是Javascript的代码,因此继承了大量的Javascript特性。Javascript在当下是如此的流行,以致于ECMAScript标准主要是改进性地前行而不是颠覆性地进行。Golang能够被认为是从c/c++这些更保守的语言上的进化。Golang核心结构的创建是在C和Python的基本准则之上的。node

咱们接下来会对比一下Golang与Nodejs的优缺点,从而让你更好地选择在接下来的工做里面该选谁。linux

性能

  • Golang:与c/c++差很少的性能特性,能够说是很是出色了。c++

  • Nodejs:若是从原始性能上来讲,Golang和Nodejs比较是相对公平的。 原始性能即CPU没有额外的负荷,Golang和Nodejs在这方面都相对展现相对使人满意的效果,可是Golang在实际运行性能可能会更好,由于服务端运行时候的性能都各类因素的影响。golang


并发

  • Golang:Golang使用一种并发模型叫“Goruntinues”。Goruntinues容许多个协程同时运行,轻松靠谱地完成并发任务。web

  • Nodejs:Nodejs是单线程的,意味着执行任务是顺序执行的。在大规模扩展的同时须要处理多个并行任务在同一时间可能会出现一些致命的弱点。Javascript容许利用事件回调的方式来处理并发,但这种方式并非足够的高效。编程


可扩展性

  • Golang:Golang自己就是为了可扩展以及高并发场景设计的,因此没有太多的阻碍。
  • Nodejs:已经有不少使用Nodejs的人或者公司声称Node在大规模扩展的环境会有出现一些问题。可能Node能够在之后去修复这个问题。

开发成本

  • Golang:Golang算是一门比较新的语言而且尚未开始彻底流行起来,因此须要作好要查阅大量资料以及手动配置的心理准备。
  • Nodejs:Nodejs有成百个第三库,上千份的指引,一大堆的第三方平台。庞大的Javascript社区近几年来一直有很是大的贡献,使其能在各类现实场景中都能完成任务。


错误处理

  • Golang:Golang要求程序进行常规的显式错误检查以及返回错误代码。这种作法看起来有点困难,然而这实际上是一个更好的保持应用程序一致性的方法,这能使得应用程序更加可靠。
  • Nodejs:Nodejs使用throw/catch模型,当错误发生的时候当即触发进行捕获。这是一个更加传统的错误处理方法,不少编程语言也是使用相同的方法。因此应用程序的一致性就会有点欠缺。

晒图

2017年一个StackOverflow的开发者调查报告里面显示Golang位居前五在全世界顶级付费技术里面。

Golang vs Nodejs 基准任务性能

Golang: go version go1.10 linux/amd64后端

Node js :- v9.4.0安全

在比较了Golang与Nodejs各个方面之后,其实咱们很难去说谁比谁更加出色,他们都有各自的闪光点以及缺点。在性能方面来讲,Golang彷佛比Nodejs更加可靠,但同时你也应该从项目大小,项目结构,以及业务类型等各类方面去比较做出考量。服务器


译者补充

这部份内容并非原文全部,本文翻译的内容并不表明我本身的观点,只是这篇原文在Medium上比较热门因此我翻译了过来能够供你们讨论。我自己是一个Nodejs以及前端的开发者超过3年了,最近在用Golang练习一些后端的项目也断断续续有几个月了。我很是喜欢Nodejs/Javascript的灵活性,虽然这也是被许多人诟病的地方。另外是这篇里面说到的并发比较只是简单说了Js的回调而没有提到事件循环,虽然Nodejs是单线程但正是有了事件循环,因此其在处理并发上也是足够高效的。但另外一方面,Golang的Go rutines设计配合channel在并发状况性能确实很是高效,而正由于其不是单线程的特性,因此还会引伸出共享资源竞争以及并发安全的问题,迫使我本身要去关注和处理以及考虑更多的状况在实际使用中,也能够所以接触到更多操做系统或者是更加底层的知识和概念,而不是简单的CRUD。我以为Nodejs和Golang都有其各自的闪光点。个人建议是,若是你是一位Nodejs的后端工程师,但愿另外再接触学习一门静态语言,但愿更加底层地处理和熟悉高并发场景的话,我认为Golang是一个很是不错的选择。

相关文章
相关标签/搜索