动机
替代 nodejs 编写 cil 程序
- 提高性能,使用 nodejs 编写 IO 密集型的程序非常好,但一旦是 CPU 密集型的(例如和处理解析 ast),就会变得非常慢,即便可以通过 worker_threads 之类的方式提高,但仍然是慢的
- nodejs 编写的 cli 必须要求用户必须了解 nodejs 和 npm,当然可以使用 pkg 之类的工具打包成二进制文件,但它非常大(基于 nodejs 14)
- 将部分功能为了性能考虑委托给 golang、rust 程序,需要容易与 nodejs 结合
一些担忧
- nodejs 的生态非常大,虽然有很多糟糕的东西,但整体而言而是蓬勃发展的。不确定 golang/rust 是否如此,因为我观察到很多知名库还不到 1.0
- 目前在网络上搜索的许多文章都称赞 golang 非常简洁,但之前公司从 java 切换到 golang 时遇到过 web 业务框架与生态的问题
- golang 的包管理器看起来很糟糕,而且缺少泛型等有用的功能(几乎废掉集合的高阶函数处理)
- rust 没有太了解过有什么知名的工具,例如 golang 已知的有 hugo、esbuild 这些,后者吾辈在生产环境实践过
- rust 据闻门槛很高,而门槛很高的,据吾辈接触的包括 ng、scala 都没流行起来,相反的,vue 成为了 react 之外的第二选择。
所以,考虑到上面的动机和场景,吾辈应该选择哪个更好呢?
rust不建议,除非你有极致性能需求,代价可以参照:C语言编写命令行
golang包管理挺不错的啦,你不能和npm比,那是所有语言中,最好的包管理工具。golang包管理不好的地方就是基本上每次都会被墙。不过也有对应的解决办法。
我们曾经给一个大厂做个巨量图片上传阿里云的服务支持,就是用golang编写的,性能还不错了。
你说golang没有泛型,每门语言都有自己特点和优势,想用泛型,不好意思,大多数语言都不支持,没看错,是大多数,比如比较知名的语言:c, php,js都没有,更别说一些小众的语言了。想用泛型就Java。但是java也写不了命令行工具啊。
写这么多,其实是想让你坚定下信心,选golang没错。如果不考虑性能,用python和node也没错。