粗大事了:花两天时间学习了 Go 语言,发现比 Node.js 高不知多少去了

2016-04-03 16:19:20 +08:00
 xhowhy

先说感受到的先进性:

  1. 语法非常简洁,有种在学 C 语言的感觉,学习过程觉得很轻松,没有太陡峭的曲线,但语言也完全够用
  2. 自带工具就非常强大,而且各 IDE 和 Editor 都能集成,开发工具完全不是问题
    • go get = git clone + go install ,从 github 上直接 clone 下源码,编译出 .a 包文件和安装 bin 到 $GOPATH ,就可以本地任意地方使用了。反观 npm ,相信很多人不知道 NODE_PATH 的存在。
    • gofmt 代码风格统一,码农们再也不用为空格与 Tab 争吵了
    • go test 支持 benchmarks 和覆盖率测试
    • godoc 查看文档的工具。支持本地执行 godoc -http=:8080 后就能在浏览器中访问 golang.org 的本地 copy 版,对被墙的同学是个不错的选择
  3. 支持 Github ( Gitlab 等也可以)远程包,不需要发布到类似 npm 那样的地方
  4. 并发用协程和 channel 非常容易写,业务逻辑中可以尽量避免回调
  5. 部署非常简单,可以运行二进制文件,也可以通过 go get 来安装 bin ,运维起来非常方便
  6. API 稳定,据说从发布到现在语法基本没变,只是 Go 内部做了改进和优化
  7. 本人还用 Swift 写过 iOS ,发现 Swift 似乎是从 Go 身上学了不少东西。。

劣势:

  1. G...FF..WWW ,想下个 pkg 安装文件非常困难,最后是通过 brew 下载的
  2. 国内资料少(这么简单的语言,似乎也不需要什么资料)
  3. 社区小不如 npm ,国内想找个工作更是困难

不确定性:

  1. 性能与 Java 比如何,相当于什么水平

综上所述,感觉 Go 确实是一个目前比较理想的开发工具,大家一起讨论讨论,人生苦短,为何不用 go ?

55011 次点击
所在节点    Node.js
197 条回复
xhowhy
2016-04-03 21:12:51 +08:00
@loading 你说得很对啊 我需要你的观点
xhowhy
2016-04-03 21:14:13 +08:00
@loading 你说得对啊 我是想听听你的观点
xinxu
2016-04-03 22:19:20 +08:00
说了半天没说 goroutine 是什么情况
bramblex
2016-04-03 22:29:31 +08:00
@xhowhy 我就拿 python 写过个三千万日 pv 的。顺便,关于所谓的 callback 我给你科普一下。

http://lovearia.me/article/show/1
xhowhy
2016-04-03 22:35:35 +08:00
@bramblex 呵呵 用不着你科普 我用 node.js 写过日 pv 八千万的网站。。绝逼不是吹牛
虽然如此我仍觉得 node.js 的 callback 和 go 的 goroutine + channel 一比就是一坨翔。。而且 go 也支持 callback , callback 这货用来做界面编程还行,用来做并发真不如 goroutine + channel 直观
xhowhy
2016-04-03 22:38:53 +08:00
@xinxu 可以自己去看啊。。改天我撸个典型的场景 看看 async.js 、 co 、 promise 和 go 的各自实现
edward1992
2016-04-03 22:41:59 +08:00
又来整个大新闻,把 node.js 给批判一番?
xhowhy
2016-04-03 22:43:37 +08:00
不明白为什么有人抱着 callback 当宝不放,不看看外面的世界,这么抵触新的知识和观点。。。 async.js 、 co2.0 、 co 4.0 、 Promise 的存在,不都是为了解决 node callback 在并发业务逻辑处理上的表现力问题吗
barbery
2016-04-03 22:51:25 +08:00
Go 真心是不错的,学习成本很低,性能只能说碉堡。。。唯一不爽的就是 if err != nil
Wangxf
2016-04-03 22:58:47 +08:00
Node.js 从来都不是拼语言,我们是拼的生态环境, js 使用者数量大而已
XIVN1987
2016-04-03 23:08:12 +08:00
go 还不支持泛型
C++、 C#、 JAVA 都支持泛型,新出的其他编程语言也都支持泛型,,就 Go 不支持
chiu
2016-04-03 23:08:55 +08:00
貌似楼主初衷只是想讨论一下服务端领域的 Go 和 Node.js 的应用,怎么就干上了……
建立楼主 Append 说明下吧 @xhowhy
xhowhy
2016-04-03 23:13:41 +08:00
@Wangxf 说得对,但从语言、工程化角度来看,不知道 Go 是不是一个更好的替代方案
bramblex
2016-04-03 23:22:07 +08:00
@xhowhy

呵呵呵, callback 是啥?再说一遍?不懂就不懂,还找借口
ovear
2016-04-03 23:25:43 +08:00
等等。。满屏幕的 callback 是 nodejs 的优雅么。。我记得好像之前还有人在喷 nodejs 回调一多, stackprint 就不完整。。
superhxnju
2016-04-03 23:34:08 +08:00
没人黑 Go 没有很好支持范型这点很烦么……还有不能函数重载也是醉了
xhowhy
2016-04-03 23:37:13 +08:00
@bramblex
你是不是觉得就你牛逼就你懂 callback ? koa 为什么要先后用 yield 和 await 来替代 callback 问题?就是因为复杂的业务逻辑是不适合用 callback 来表达,也不利于调试,所以用 yield 和 await 显著改善了异步代码的开发和调试难度。
goroutine 和 channel 是啥懂不懂?也建议你看看,开喷前请提高姿势水平,不要为了喷而喷。
demomaster
2016-04-03 23:39:11 +08:00
C 语言简洁,装的飞起.(*(void)(*)( ) )0)( )求告知
xhowhy
2016-04-03 23:39:43 +08:00
@bramblex 看来哥真的是来给你指点江山的,不谢哈
kookxiang
2016-04-03 23:41:21 +08:00
辣鸡 npm
go 无中心的包管理不会导致 npm 的 left-pad 事件(滑稽

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

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

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

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

© 2021 V2EX