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

3,318 阅读4分钟

原文:medium.com/codezillas/…

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

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

性能

  • Golang:与c/c++差不多的性能特性,可以说是非常出色了。

  • Nodejs:如果从原始性能上来说,Golang和Nodejs比较是相对公平的。 原始性能即CPU没有额外的负荷,Golang和Nodejs在这方面都相对展示相对令人满意的效果,但是Golang在实际运行性能可能会更好,因为服务端运行时候的性能都各种因素的影响。


并发

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

  • 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是一个非常不错的选择。