前几天被一篇文章《为什么说 2017 年你必须要学习 Go 了》刷屏了,我原本也学过一点这门很火的语言但是没有真正用过,于是点进去看了下觉得功利+不靠谱。码农闻到了 bad smile 就是不吐不快,今天来战一战 go 语言吧。
第一段大篇幅写“硬件限制”,讲对多核的利用+对 cpu 高效率利用多么重要,的确这个很重要,各语言肯定都在追求做好这件事。
第二段讲 goroutine ,我觉得 goroutine 是好东西但是和多线程比肯定不行啊, goroutine 本质上是把异步回调的代码用同步的方式来写(语言底层处理了细节,所以性能上和异步回调并没有差别),你要比和 libevent 之类的异步事件库比啊;而且你黑 python 多线程也就完了, java 的多线程那么好那么工业级的东西。实际上 goroutine 的确比异步回调写起来容易了,单身业务逻辑多线程同步方法写肯定是最简单的。那个( Beautiful,straight code/Efficient concurrency )表严重不同意,静态类型的 c/c++和 java 在可读性上会比 erlang 、 clojure 差么,会和 js 、 perl 、 python 这些脚本语言在一个层次上么?而且性能还要看场景的,你这么钦定了真的好么。
第三段 go 可以编译成二进制的确很震撼,不过既然没有消灭 gc ,那你说 go 的是一个 runtime 不是虚拟机我也无话可说。然后讲 go 的性能怎么不提 gc 了, rust 也是编译成二进制消灭 gc 消灭 malloc/free 的。
第四段讲 go 代码容易维护,举了一堆 go 没有的特性然后来把这个当 feature ,我觉得很搞笑。然后 Go 和其他语言非常不同这一点我承认,但是这也是我学习 go 的时候非常不适应的原因。我觉得一个语言最珍贵的品质应该是解决问题而不是与众不同的语法,在我这个 go 初学者眼里 go 除了编译成无依赖二进制和 goroutine 这 2 个杀手级 feature 以外,作为一个开发者我看不到它有别的创新,甚至有很多业界广泛使用的 feature 没有做。我学过语言也学了半打了吧,我很烦一些编程语言搞一些特立独行的语法,如果你这个语法没有带来新的 feature 那么老老实实学 c/c++或者 java 就完了嘛, go 语言看起来丑说到底还是语法想搞的特立独行。
然后我比较同意的是他把 Go 的兼容性拿来说了一下,这也是我非常看重的。另外代码维护就不得不提第三方库管理机制吧?
最后说 GO 的背后是 google ,这个潜意识不就是社区驱动的语言不如大公司驱动的语言么,我认为这是非常功利的说法。 mysql 背后就是大公司, postgresql 背后就社区,二者都做的很好,而 google 为啥还迁出 mysql ; java 背后还是 sun 是 oracle 呢,微软和 google 不是还被恨咬过么。实际上一项基础设施技术一个大公司主导好不好这个还是不好说,大公司投入肯定好,但是大公司为了自身业务有的情况会和社区有分歧,实际上 go 官方对社区的意见就没有社区驱动的 rust 重视嘛( rust 由 mozilla 公司驱动)。 Facebook 为了满足自身也无需要弄出了 hack 也没法强加到 php 身上,因为基础设施肯定要服务大多数开发者。
我个人就是个土包子喜欢实用皮实的技术,我讨厌装逼的技术 /工具 /库 /语言,对我来说啥是装逼的技术呢? 重复造轮子,把自己包装的逼格很高,忽视兼容性,性能差,和业界现有的工作缺乏继承关系,故意弄得不兼容。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.