感谢大家邀请。

额,基本上我的观点跟轮子哥一致,语言对项目的提升并不大,关键还是开发经验和思路。

举个例子,我之前用Erlang的时候游戏数据都放内存里,我以为那样就够了,一张MySQL表对到一张ETS表,于是上线的时候就坑爹了,表数据一多,负载就上去了,因为大量数据遍历效率还是不行的。当时又不敢大改,于是我在底层做了一个不需要动到API的逻辑修改,把一个表拆分成100张,才勉强撑过去。

到了用Go的时候,我当然学乖了,数据直接按玩家来切分了,然后表还分了各种类型,比如有的功能数据条目有限,我就牺牲内存空间换执行效率,用数据组而不是列表,数组索引跟数据id做一套编码,再比如装备表,一个装备数据拿出来时候常常要连带装备强化信息,比如洗练、镶嵌啥的,于是我利用Go有指针的特性把装备表设计成父子表结构,一条装备记录拉出来的时候自然就连带着强化数据一起了,但是没用到这些数据的时候又不需要做拷贝。

如果我继续用Erlang,那我大概也会把内存数据库用C做成Erlang的Driver,而不再用ETS。

所以就像轮子哥说的,语言只是一个幻觉,让人觉得用了就没问题了,其实决定因素不在语言,在程序算法和结构上。

做服务端开发还是得越做越往底层走的,底层的技术搞懂了,语言之前的区别就只是招人难不难,用起来开不开心的问题而已。

Go的并发性能语法优势之类的,网上已经很多人夸了,我这里说一个比较少人提的优点。

Go可以让不熟悉底层的程序员平滑的接触和深入底层。

在一开始只学会Go,掌握基本的语法以及编程技巧,比如避免遍历、避免数据拷贝等,就可以做出很好用的服务端程序了。

要进一步追求性能,那就可以挖开Go的源代码,看其内部实现,再配合Go提供的pprof工具分析项目。Go的代码很清晰,分析工具也很好用,到了这个阶段你就不再需要听别人说哪个好哪个不好了,你自己会有自己判断的。

Go提供一个功能叫cgo,可以让Go快速的对接C/C++写的库,我是从cgo才逐渐熟悉C/C++的,比较奇葩的学习路线,但是学习曲线不会那么陡峭,一边学就可以一边产出代码见到成效。

选了Go就相当于选了一条比较平缓的路线,但是不管用什么语言或技术做服务端,每个路径肯定都是指向系统底层的,就看怎么走而已。