对《为什么说 2017 年你必须要学习 Go 了》这篇文章的疑惑

2017-01-14 13:48:11 +08:00
 gouchaoer

前几天被一篇文章《为什么说 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 身上,因为基础设施肯定要服务大多数开发者。

我个人就是个土包子喜欢实用皮实的技术,我讨厌装逼的技术 /工具 /库 /语言,对我来说啥是装逼的技术呢? 重复造轮子,把自己包装的逼格很高,忽视兼容性,性能差,和业界现有的工作缺乏继承关系,故意弄得不兼容。

25838 次点击
所在节点    程序员
116 条回复
Brucepac
2017-01-14 22:47:44 +08:00
我想知道楼主怎么评价 swift
88250
2017-01-14 22:48:07 +08:00
多说无益,来练练手吧: https://wide.b3log.org/playground
xcodebuild
2017-01-14 22:54:20 +08:00
@chenqh 不支持封装一层也非常容易,而且现在新出的库少有不支持的,这貌似完全不是难点吧。。。
cuebyte
2017-01-14 22:59:02 +08:00
@spice630 谢谢你,已 B
chenqh
2017-01-14 23:12:15 +08:00
@codefalling 是难点……对于我这种刚准备学 nodejs 的人来说,没有享受到一点好处,就被喂了一堆屎
chenqh
2017-01-14 23:13:14 +08:00
@zwh8800 你们的并发都那么高的吗?我也想我能有一天需要用 golang 的日子……
xcodebuild
2017-01-14 23:19:29 +08:00
@cuebyte 哈哈哈这人早 B 掉了,你要不诶特我都看不到
scnace
2017-01-14 23:26:46 +08:00
@mengzhuo 我也觉得挺好的 能尽快捕获错误。。
missdeer
2017-01-14 23:27:10 +08:00
大多数喷 Go 这不好那不行的人基本上对软件工程一无所知,或者是没负责过大规模的开发项目的。不然应该能体会到 Go 一些看似莫名其妙的设计是多么的贴心,比如 lz 说的变量不使用就不能编译过。
bash99
2017-01-15 00:00:13 +08:00
更好的 c
weiweiwitch
2017-01-15 00:01:07 +08:00
@missdeer 个人觉得, go 挺适合做一些小型或者中型的项目的,但说到大型甚至超大型的项目, go 还有很大的进步空间。
weiweiwitch
2017-01-15 00:02:23 +08:00
@bash99 同意你说的,从 C 或者 C++转 go 的,会更有亲切感。
mingyun
2017-01-15 00:04:47 +08:00
@88250 nice
spice630
2017-01-15 00:15:43 +08:00
@codefalling
麻烦你黑人的时候把争议链接带上,别搞的自己跟正义之师似的,恶心~~~
cuebyte
2017-01-15 00:16:24 +08:00
@missdeer 这种小 trick 有什么值得吹的?一个 gofmt 把代码风格限死也能被你们吹半天我真是服了,错误处理明明是反人类设计也能被你们视为“最佳实践”,估计你们也会觉得没有范型是个好特性吧。对软件工程一无所知?可能你们才是井底之蛙。
ericbize
2017-01-15 00:17:57 +08:00
所以一个学过 c 渣渣 , java , python 的小萌新应该选择什么?
cuebyte
2017-01-15 00:19:47 +08:00
@sagaxu 我倒是把 kotlin 看成更友好、更简单的 scala 。未来应该会更好。
HuangLibo
2017-01-15 00:22:59 +08:00
有些人把 Go 吹上天了, 这是病, 得治.
spice630
2017-01-15 00:27:00 +08:00
@cuebyte
1.gofmt 并不是必选项
2.gofmt 的确是很好的设定~~
sheepbao
2017-01-15 01:06:47 +08:00
你这不是疑惑啊,你是全盘否定啊,语言只是工具,你喜欢就用,不喜欢不用,没人强迫你
比如:
我喜欢 go ,我就用,我不喜欢 java ,我就不用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/334561

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX