前几天被一篇文章《为什么说 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 身上,因为基础设施肯定要服务大多数开发者。
我个人就是个土包子喜欢实用皮实的技术,我讨厌装逼的技术 /工具 /库 /语言,对我来说啥是装逼的技术呢? 重复造轮子,把自己包装的逼格很高,忽视兼容性,性能差,和业界现有的工作缺乏继承关系,故意弄得不兼容。
101
peoce 2017-01-15 20:31:21 +08:00
在小公司然并卵
|
102
jeffersonpig 2017-01-15 20:42:02 +08:00
我最不能忍的就是 Go 强制规定了{}的风格
|
103
bobuick 2017-01-15 20:49:19 +08:00
这争来争取也是有劲。
学不学好像搞的多学这门语言,会丢失一个女朋友一样。 合适了,需要用了,学不就好了。 |
104
ArcherFeel 2017-01-15 21:16:20 +08:00
@k9982874 这样说不对把, 世界上又不是只有客户端编程. 微软自从被 Sun 告了之后就在 windows 中移除了对 Java 的原生支持, 现在也没多少 Java 写的 PC 端程序, Java 还不是一样成为了工业级语言火遍全球.
|
105
jarlyyn 2017-01-16 01:56:06 +08:00
我关注 golang 是因为最近某热贴里,有人的私活用 golang ,最后结果赚了几 w.
让我发现 golang 的确还是有些很实用的点的。 至于你们在吵的,不知道在吵啥。 讨论语言的不讨论怎么赚钱的,是因为工作太不饱和么? 有这吵架的功夫多学几个语言几个库不好么。 |
106
manongvpn 2017-01-16 07:50:29 +08:00 via Android
渣渣来过,学会 golang 再来一拼。
|
107
manongvpn 2017-01-16 07:51:14 +08:00 via Android
另 golang 需要扶墙,这里 https://github.com/manongvpn/manongvpn
|
108
araraloren 2017-01-16 09:10:27 +08:00
@HarveyDent 大概也就只有语言风格(函数式和命令式?)的区别了。。。
|
109
njutree 2017-01-16 11:08:38 +08:00
这种营销文章确实让人反感,很多语言都有。不过楼主你对 golang 理解错了好多,尴尬。
|
110
holy_sin 2017-01-16 12:07:00 +08:00
@qwer1234asdf 总结的很到位
|
111
mentalidade 2017-01-16 14:20:47 +08:00
@zwh8800 感觉和 nginx 好相似
|
113
findex 2017-01-16 15:40:51 +08:00
需要应用的场景,就会去用那个语言。产品、语言都是给不同的需求决定的。
并不是说一个语言就是万能的,最强的。需要用到就好了。 |
115
JamesRuan 2017-01-16 23:36:25 +08:00
@HarveyDent
Erlang 是 Actor 模型做线程同步, Go 是 CSP 模型。 Erlang 是 FP ,不允许有变量, Go 更像 C 。 Erlang 是编译到字节码,用虚拟机运行,平台差异用虚拟机抽象。 Go 是编译到原生程序,坑多,但性能更好。 Erlang 的 GC 和调度比较适合大量使用 Actor 模型。 Go 的调度似乎也牛逼,但 GC 目前还有些问题,不适合用 Goroutine 写时间要求很高的代码。 用 Erlang 写好代码比较容易,心智负担比较小,模式匹配很爽。用 Go 写起来比较罗嗦,心智负担大,但同时也更加灵活。 |
116
Clx7 2018-08-30 17:24:21 +08:00
想转 go 开发的可以看过来哦,我司就是选用 go,结果是不好招人~~~
|