Go语言的缺陷

5月13日的时候,Go语言正式发布了1.1版本。从Go第一次发布到现在,已经快要过去四年的时间了,即便从1.0算起,也已经有整整一年的时间。从TIOBE的编程语言统计排名一类的资料上来看,仍然属于一个非常小众的范围。Zack从一开始就对Go语言不是太看好,不认为这会成为一个太受欢迎的编程语言。

Go语言中尽管包含了一些好的设计,但也并不是什么全新的东西。在Python和JVM里基本更早都有了相应的特性。Go语言里处理并发实现的CSP(Communicating Sequential Processes)模型被高估了。其实,相比Erlang以及Akka中的Actor,Go语言里提供的模式都太底层了,特性也太少,对于开发人员来说并没有提供太多的便利特性。

而如果看看比如.NET中现在提供的Future,以及C#中处理异步的方法,也会发现Go从接口以及实际使用角度来看,还处在比较初期的阶段。

所谓的interface-oriented design,对于熟悉Java Interface等的人来说,也不是什么特别新颖和太值得强调的。

而Zack觉得最可怕的事情之一,就是Go语言那看起来显得有些滑稽的语法。比如多个变量或参数申明,可以在最后一个的结尾指定类型,而不用每个都指定。再比如说,移除了for以及if中条件判断部分的括号。在语法规则上看起来,似乎是有了些挺新颖的东西,但若去看下以此写成的代码,就会觉得还是尽量别使用这样的特性好些。可以对比下Go,Python和Scala的代码,孰丑孰美一眼就看的出来。

有人一定会说,Go又不是定位在和Python一类的语言竞争的角度,比较代码和语法的差异有什么意义?确实,并不能简单把某几个语言等同比较,但Go的一些语法规则,在Zack看来,不仅仅是有一点差了,而是可以用糟糕来形容。编程语言也是语言,很难想象如果在直觉上就让人觉得不舒服的Go语言,能够被多数程序员接受。

在Go语言这个项目设计初衷里,比如提高大型程序的编译速度,提供独立性更强的代码组织结构,更轻量级的type以及面向多核和并发的设计。这些着重点是符合趋势的,但并不新颖,其它语言平台同样有相应的解决方案,Go就目前来说,还没有足够的案例来证明自己更出色。然而显得新颖的地方,Go却做的并不好。