Golang使用感受
说白了一门语言对你造成重大影响的就四个东西:性能,行数,易理解度,坑的多寡深浅(包括网上的相关资料和第三方类库)。
性能方面
Go 的性能基本上只输 C 家族,最坏情况也就慢几倍(不像某些流行语言慢几十上百倍),就算用来实现对性能要求苛刻的算法也算不上浪费 CPU。但如果看广义的性能,把并发算进去,还是比较爽的。像 Ruby / Python 这类被 GIL 束缚手脚的语言就不说了,而相比那些直接操作系统级线程/进程的语言来说,速度优势就很明显。当然,很多语言也可以包一个轻量级线程的实现,但问题就出在这里,他们官方没做这个事情,这种命根子需求使用第三方库会带来很多隐患。
行数方面
这是 Go 的小劣势,总体表现力不如 Ruby / Python / Scala / 各种 FP。其中矬爆九天、蛋菊俱焚的一点是:它没有泛型,以至于一个最简单的数组的 reverse 都得给每个类型实现一次。有人可能会说,用 interface{} 或者 reflect 什么的也可以,但从此程序的稳定性会走向不归路。但无论如何,它比 C 家族代码要短,如果能灵活运用闭包、defer,可以省不少事情。另外如果是并发逻辑比较复杂的场景,把 chan、select 用好,代码可以比任何语言都短。
易理解度
跟大多数语言区别不明显。但我最近读了一些 C 家族的代码,已经觉得有点不习惯了。我发现 C 家族的代码有很大一部分是浪费在语言本身的破事上,Java 也好不到哪里去。这么一说 Go 还是应该算中上水平。
坑
目前我司在使用 Go 遇到的所有坑在网上都比较容易找到解决方案。官方文档齐全,源码也精简易懂。第三方的东西不算多,但比起像 nodejs 那些稀巴烂的第三方库质量好太多。有一点值得注意的是,我司没有专门测试的员工,但 Go 实现的服务 bug 很少,基本上 bug 都是对业务理解的问题(或是偷懒啥的)所导致,而且 bug 出现之后对服务的影响都能被控制在一个范围里,这是一件很好的事情。不会像以前写 C 家族时候出现指针乱飞、内存写乱的状况,也没有 Python 同事经常出现的变量名 typo 问题(你见过几个人爱用静态检查工具?),换句话说,Go
的程序健壮程度跟 Java 系列相仿。
印象比较深刻的就这些。对于我来说,如果 Go 把泛型补上就比较完美了
有疑问加站长微信联系(非本文作者)