首先感觉Go受到C,Java,Javascript,Scala/Haskell的影响,但是从精神上主要是C
的影响,这也是人所共知的,所以确实是个升级版的C语言。看得出来作者是较强烈
against Java的,这点比较赞。JS和Scala/Haskell的影响主要是functional和一些语
法特性上,但是显然functional的影响比较浅显,甚至还不如对Java8的影响大。
先说说优点
1. 并发设计的十分强大,在我用过的几种语言中绝对是排行首位,也是go的最大卖点。
2. 简化了OO,抛弃了OO很多糟粕。
3. 简单易学,大众语言, 适合团队作战。
4. 确实在不少地方对C语言进行了改良。
再说说缺点
1. 最大的问题就是error handling部分,延续了C的处理方式,在语法部分尝试去简化
,但是感觉效果其实并不是很明显。
2. 因为#1,使得一个函数里会出现很多的return,可读性比较差。但是由于加入了
defer,使得问题没有在C里面那么严重,习惯了也不是不能接受。
3. goto感觉被阉割了,C语言里的一些技巧很难使用,感觉goto的用处没那么大了。当
然这也不是坏事,goto本来就应该少使用,但是由于error handling的繁琐,不能通过
goto来解决还是比较郁闷。
4. 保留pointer比较奇怪,不过也不是不能接受。
5. 没有generics这个,我现在感觉还没给我带来明显的障碍。
如果不谈并发,我个人不觉得go的productivity高,当然比C,Java高那是肯定的。但
是还有很多可以提供更高的productivity。但是并发的简化这块可以明显提升
producitivity,所以如果写大并发应用的话,还是个很好的选择。