Node.js阵营出现投奔Go的'叛将'

一位Node.js guru大牛 TJ Holowaychuk最近发表了再会Node.js,他曾经是Empress, Mocha, Jade, Stylus Koa等参与者,TJ在这篇宣言中首先强调自己是一个古老C语言的粉丝,Go语言自然是其最爱,他指出Node.js存在几个硬伤:错误处理Error Handler 回调地狱和健壮性。这篇文章如同一颗炸弹,在充满活力的Node和JavaScript的社区引起了轰动。炸开锅了。

下面文章是有关讨论:
TJ leaving node.js

Why I'm (partially) leaving Node for Bash

Why I’m staying with Node

The March Towards Go

反对者认为:T.J.指出的Node.js问题非常类似英语,虽然有一堆错误语法,但是我们还是能够彼此能听懂。而Go语言如同夏威夷语,简单,体积小,效果好,不易出错,但是很少知道(banq注:经过这么一吵架,大概知道人很多了)。而Java类似德语。

Node.js在几个下面有优势:
1.Web应用,使用Node能够在前端和后端之间共享代码。
2.正确工具适合相应的工作,如果需要并发支持的复杂智能算法,那么Go等语言更合适,但是也不能仅仅靠一段循环代码的小型基准测试就在Node和Go之间进行抉择恐怕不合适,产品的ROI投资回报率和开发效率 以及易招聘恐怕也是应该考虑。

另外一位反对者认为:可用性和缺乏强大的错误处理是Node主要问题,Error-handling是Go的一个强项,Node需要你考虑每个错误然后决定怎么去做。但是这两个问题是可以避免的。

可以使用streamline.js这样的流库来支持流Stream开发,这反而能使用老结构的exception handling,这种方式比Go语言更好,因为你不必每次调用以后检查错误代码。

不要使用双重回调callbacks; 这样就不会陷入回调地狱,丢失回调的跟踪,所有报错都要显示其上下文。这样调试代码能够有可理解的stacktrace。

使用基于回调而不是基于事件的stream库,能够让我们代码更加简单,健壮和易于理解,另外使用generators, fibers, preprocessors等可以用顺序编程的方式编制出异步执行的代码。

如果说,三年前因为JavaScript和独特异步I / O,Node.js成为最酷的平台,但是在今天在有其他可替代方案的情况下,人们将要求更多,特别是在可用性和鲁棒性。

关于Go语言:Why Go Is Not Good,该博文作者竟然将Go语言和Rust Haskell两种语言比较,得出Go语言不够好的结论?

Go语言开发的Docker: http://www.jdon.com/46474