将 Node.js 换成 Go 已翻译 100%

oschina 投递于 2015/01/30 05:30 (共 7 段, 翻译完成于 02-05)
阅读 21123
收藏 104
5
加载中

回顾过去的一年,我们在技术栈上的最大改变就是从 Node.js 切换到 Go 。我们的联合创始人,Steve Kaliski, 在 Poptip 把 Node.js 切换成了 Go,可惜他没有学习到当时的教训。在用 Node.js 建立了 Bowery 的第一个迭代版本后,我们在2014年2月切换到了 Go,我们的开发和部署速度也因此得到提升。

从那以后,我们整个团队都变成了专职的地鼠(译者注:Go 的吉祥物)。Go 清晰明确的标准和更简便的工作流程让我们用 Go 用得很舒服。下面是我们热爱用 Go 进行工作的原因,你可以从中瞄一眼我们的地鼠洞。

l
翻译于 2015/01/31 13:58
2

容易编写跨平台代码

我们切换成 Go 的其中一个最大原因就是它是那么容易去为不同系统编译代码。

在 Bowery, 我们在建立一个能帮忙你和你的团队管理你们的开发环境的app,我们必须要高效地支持所有操作系统——Linux,Windows 还有 OSX。在Go中,你可以为不同的操作系统定义不同的文件,从而实现依赖于操作系统的功能。一个绝佳的例子就是我们的同伴 Larz 在构建一个从命令行读取用户输入的包 Prompt 的事。Larz 希望去创建一个 Go 包用来实现跨平台的行编辑提示。这在 Go 中是如此简单:为每个操作系统创建不同的文件,Go 编译器会根据操作系统来选择应使用的文件来生成最终内容。

为其他的系统编译代码同样很简单,你要做的仅仅是设置一个环境变量,然后你就有了一个你在 Linux 系统上编译的 Windows 二进制文件。

l
翻译于 2015/01/31 14:33
1

更快的部署

Go 是一款编译型语言并且可以更轻松地在多个平台上分发应用。 对我们而言,部署和测试是很重要的,同时也是我们最终用户的一个资产。通过 Go,构建服务然后运行测试会很容易,因为迁移到生产环境的服务器时就准备好了。 Go 不需要任何的系统依赖,让它的发布真的很简单。 当要发布命令行工具或者其它应用时,我们的用户不需要担心要安装Java,RVM或者NPM才能运行。 我们喜欢这篇Jeremy Saenz 的文章,他讨论了为什么他把他所有的命令行工具迁移到Go(CLI tools to Go)。

水煮长颈鹿
翻译于 2015/02/03 14:23
1

并发基元

当切换到Go时我们意识到Node.js的事件循环并不是一切Node.js 没有提供太多的并发基元。唯一能同时运行的是I/O程序和定时器等。你无法通过这些程序通讯,所以用Node.js建立一个敏捷的系统是一个挑战。使用Go,你可以在运行任意并程序的同时,提供一个频道去给程序发送信号让它做一些事情,或者给它们发送一些值来共享数据。Go还提供了像 mutexeswait groups等低级别的并发基元 。 有的你可能在NPM上找到,但我们发现在处理并发和并行时频道是决定性因素。

水煮长颈鹿
翻译于 2015/02/03 23:10
1

集成测试框架

用Node.js的时候,我们已经有了我们的测试框架选择,但一些框架对于前端来说更好用,比如Jasmine, 其它的框架则对后端来说更好用,比如Mocha。也有其它的选择像JSUnit和PhantomJS,如果你看过StackOverflow的这篇文章,那里也有人推荐许多的框架。在一些世界里,选择是一件好事,但使用Go的时候,我们喜欢测试框架的规范化。在Go里,所有的测试包都是内置的。如果你需要写一个新的测试套件,你必须做就是把(文件名)_test.go文件加到你要测试的软件的同一个包里,它将会在你每次执行go test的时候运行

你可以在writing tests with Go学到更多关于Go 测试的知识。 需要测试HTTP services? Go同样提供了httptest

标准库

我们喜欢仅用Go的标准库就能写大多数的软件。用Node.js时,我们几乎都是不得不引入一个外部的库, 这样做既增加了部署的时间,也增加了来自第三方软件的潜在隐患。只用标准库能让我们写的代码更快更安全。

水煮长颈鹿
翻译于 2015/02/04 21:11
1

开发者用的工作流工具更强大

Node.js除了NPM的包和脚本控件,没有真正的标准化的工作流。除此之外, 因为这些工具是社区创造的,虽然很好用但是实在太多了,以至于最终的结果就是事情被每个人以不同的方式完成了。在Go里工作流标准化的一个很好的例子就是工作区的布局。你要放弃很多开发自由因为你必须遵守工作区的布局,不过它提供了大量的结构:你可以保留你的Go源码和依赖在同一个位置。在你的工作区你有3个根目录: src 码包,pkg放编译过的包,bin可执行的程序让你的源码和依赖放在一个单独的工作区是一个最佳实践, 让它在每个人的机器上都是这个标准。在团队合作里这些可预测性是让人满意的。我们可以去任何人的机子上提供帮助,并且知道我们的代码将会出现在$GOPATH/src/github.com/Bowery这个路径,而不是其它像$HOME/some/path/to/Bowery这样的路径。类似的,gofmt用同样的方式格式化每个人的代码。对于一些肤浅的问题,像组织代码和代码风格差异在Go里根本不需要担心,这是一个大大的解放。你可以专注修复你的问题,其它的事都被考虑到了。

水煮长颈鹿
翻译于 2015/02/04 22:13
1

还有一大堆其它的原因去喜欢Go,我们看到越来越多的公司采用Go让内部应用变得更强大并且是可分布式的。但总的来说,Go团队发现如果你创造标准并弄成范例让别人同意的话,开发者们会更高产。 比如, MongoDB 的应用管理团队喜欢用Go的"明智的、 统一的开发经验"。 在 Soundcloud,他们喜欢用Go严格的格式化代码规则和“实现的方式只有一种”的哲学。这意味着你会在代码审查和争论代码风格和格式上花很少的时间,而可以用更多的时间去解决你问题的根源。

如果你刚开始使用Go并且想了解更多,这里有一些资源可以看看。

如果要开始你的第一个Go项目,设置你的新环境并在Bowery分享给你的团队吧。

水煮长颈鹿
翻译于 2015/02/04 23:46
1
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(105)

0Scn
0Scn
暂时只io.js、golang、现代C++混用中。
terrancy
terrancy
GO和Nodejs这个要看项目需求.没有绝对的好坏~
sikele
sikele

引用来自“sikele”的评论

还有将nodejs转成fibjs呢,fibjs算是有了那么一丁点并发同步基元,不过用nodejs的人也不会有人懂吧。nodejs自己分裂成这样子,真是可怜。

引用来自“yukjin”的评论

我用Nodejs不影响我懂并发,我是做java的,平时喜欢用node写东西,难道你认为用node的人只会Node?

引用来自“sikele”的评论

你可以去nodejs吧看看,我去问了下同步,有几个人懂同步的?你是搞java的,当然不一样,纯js开发者一般都不懂并发问题。

引用来自“yukjin”的评论

你去https://cnodejs.org/问问看

引用来自“sikele”的评论

一个没同步类的东西整天吹异步还没人指出就知道国内的风气了,国外不知道。

引用来自“EEP”的评论

喷子真多,就算node的异步是不适合你们,起码你不理解这种方式。同步的话可以试试国产的fibjs
废就是废,没啥好狡辩的,再说也逃不开我1楼说的
sikele
sikele

引用来自“sikele”的评论

还有将nodejs转成fibjs呢,fibjs算是有了那么一丁点并发同步基元,不过用nodejs的人也不会有人懂吧。nodejs自己分裂成这样子,真是可怜。

引用来自“yukjin”的评论

我用Nodejs不影响我懂并发,我是做java的,平时喜欢用node写东西,难道你认为用node的人只会Node?

引用来自“sikele”的评论

你可以去nodejs吧看看,我去问了下同步,有几个人懂同步的?你是搞java的,当然不一样,纯js开发者一般都不懂并发问题。

引用来自“yukjin”的评论

你去https://cnodejs.org/问问看

引用来自“sikele”的评论

一个没同步类的东西整天吹异步还没人指出就知道国内的风气了,国外不知道。

引用来自“EEP”的评论

喷子真多,就算node的异步是不适合你们,起码你不理解这种方式。同步的话可以试试国产的fibjs
废就是废,没啥好狡辩的,再说也逃不开我1楼说的
EEP
EEP
喷子就喜欢选一门语言当妈。别人再好关你毛事,你只是一个小小的使用者。国内就是喷子多,傻BB的。
EEP
EEP

引用来自“sikele”的评论

还有将nodejs转成fibjs呢,fibjs算是有了那么一丁点并发同步基元,不过用nodejs的人也不会有人懂吧。nodejs自己分裂成这样子,真是可怜。

引用来自“yukjin”的评论

我用Nodejs不影响我懂并发,我是做java的,平时喜欢用node写东西,难道你认为用node的人只会Node?

引用来自“sikele”的评论

你可以去nodejs吧看看,我去问了下同步,有几个人懂同步的?你是搞java的,当然不一样,纯js开发者一般都不懂并发问题。

引用来自“yukjin”的评论

你去https://cnodejs.org/问问看

引用来自“sikele”的评论

一个没同步类的东西整天吹异步还没人指出就知道国内的风气了,国外不知道。
喷子真多,就算node的异步是不适合你们,起码你不理解这种方式。同步的话可以试试国产的fibjs
sikele
sikele

引用来自“sikele”的评论

还有将nodejs转成fibjs呢,fibjs算是有了那么一丁点并发同步基元,不过用nodejs的人也不会有人懂吧。nodejs自己分裂成这样子,真是可怜。

引用来自“yukjin”的评论

我用Nodejs不影响我懂并发,我是做java的,平时喜欢用node写东西,难道你认为用node的人只会Node?

引用来自“sikele”的评论

你可以去nodejs吧看看,我去问了下同步,有几个人懂同步的?你是搞java的,当然不一样,纯js开发者一般都不懂并发问题。

引用来自“yukjin”的评论

你去https://cnodejs.org/问问看

引用来自“sikele”的评论

一个没同步类的东西整天吹异步还没人指出就知道国内的风气了,国外不知道。

引用来自“yukjin”的评论

看得出来你不懂node,以后批评一个东西起码先了解一下

引用来自“sikele”的评论

你就是想说你不懂同步呗

引用来自“asdfsx”的评论

node设计思路就是异布和回调吧,就别老扯同步了吧。另外我不喜欢回调!!!

引用来自“sikele”的评论

不做复杂业务当然用不着同步,所以也就这个水平了,也没必要听nodejs党吹,我遇到的并发问题足够多一但没同不好就各种出错,所以一看nodejs就知道不行。

引用来自“asdfsx”的评论

和运用场景有关了。适合用node就上,不适合就换
写一个东西当然是尽可能适应对的场景,别人都好好的,就他不行,学他干嘛?
asdfsx
asdfsx

引用来自“sikele”的评论

还有将nodejs转成fibjs呢,fibjs算是有了那么一丁点并发同步基元,不过用nodejs的人也不会有人懂吧。nodejs自己分裂成这样子,真是可怜。

引用来自“yukjin”的评论

我用Nodejs不影响我懂并发,我是做java的,平时喜欢用node写东西,难道你认为用node的人只会Node?

引用来自“sikele”的评论

你可以去nodejs吧看看,我去问了下同步,有几个人懂同步的?你是搞java的,当然不一样,纯js开发者一般都不懂并发问题。

引用来自“yukjin”的评论

你去https://cnodejs.org/问问看

引用来自“sikele”的评论

一个没同步类的东西整天吹异步还没人指出就知道国内的风气了,国外不知道。

引用来自“yukjin”的评论

看得出来你不懂node,以后批评一个东西起码先了解一下

引用来自“sikele”的评论

你就是想说你不懂同步呗

引用来自“asdfsx”的评论

node设计思路就是异布和回调吧,就别老扯同步了吧。另外我不喜欢回调!!!

引用来自“sikele”的评论

不做复杂业务当然用不着同步,所以也就这个水平了,也没必要听nodejs党吹,我遇到的并发问题足够多一但没同不好就各种出错,所以一看nodejs就知道不行。
和运用场景有关了。适合用node就上,不适合就换
asdfsx
asdfsx

引用来自“sikele”的评论

还有将nodejs转成fibjs呢,fibjs算是有了那么一丁点并发同步基元,不过用nodejs的人也不会有人懂吧。nodejs自己分裂成这样子,真是可怜。

引用来自“yukjin”的评论

我用Nodejs不影响我懂并发,我是做java的,平时喜欢用node写东西,难道你认为用node的人只会Node?

引用来自“sikele”的评论

你可以去nodejs吧看看,我去问了下同步,有几个人懂同步的?你是搞java的,当然不一样,纯js开发者一般都不懂并发问题。

引用来自“yukjin”的评论

你去https://cnodejs.org/问问看

引用来自“sikele”的评论

一个没同步类的东西整天吹异步还没人指出就知道国内的风气了,国外不知道。

引用来自“yukjin”的评论

看得出来你不懂node,以后批评一个东西起码先了解一下

引用来自“sikele”的评论

你就是想说你不懂同步呗

引用来自“asdfsx”的评论

node设计思路就是异布和回调吧,就别老扯同步了吧。另外我不喜欢回调!!!

引用来自“sikele”的评论

不做复杂业务当然用不着同步,所以也就这个水平了,也没必要听nodejs党吹,我遇到的并发问题足够多一但没同不好就各种出错,所以一看nodejs就知道不行。
和运用场景有关了。适合用node就上,不适合就换
asdfsx
asdfsx

引用来自“sikele”的评论

还有将nodejs转成fibjs呢,fibjs算是有了那么一丁点并发同步基元,不过用nodejs的人也不会有人懂吧。nodejs自己分裂成这样子,真是可怜。

引用来自“yukjin”的评论

我用Nodejs不影响我懂并发,我是做java的,平时喜欢用node写东西,难道你认为用node的人只会Node?

引用来自“sikele”的评论

你可以去nodejs吧看看,我去问了下同步,有几个人懂同步的?你是搞java的,当然不一样,纯js开发者一般都不懂并发问题。
我觉得和氛围有关系吧。个人感觉node最多的使用者是前端工程师。对于他们来说node可以方便的用js开发出性能很好的web后端,再加上他们自己弄的很漂亮的前端,就算一个很好的应用了。而且不用再去研究java一系列的东西。至于同步异布很重要吗?当然对于专职做后端服务器应用的同步异布就很重要了。所以也别对node用户太苛求
返回顶部
顶部