Go 很好,为什么我们不使用它? 已翻译 100%

oschina 投递于 2017/05/26 14:59 (共 10 段, 翻译完成于 05-28)
阅读 8461
收藏 38
Go
3
加载中

任何在 Zapier 或者听过我周五快速演讲的人都可以证明,我认为 Go 是一个很棒的编程语言。在这篇文章中,我将分享一下为什么我认为它很棒,使用它的一些缺点,以及为什么它还不是我们 Zapier 堆栈中的一部分。

Go 是 Google 开发的编程语言,旨在帮助大型开发团队成功构建和维护高性能软件项目。 它于 2009 年起开源,并于 2012 年发布 Go 1.0。此后,许多组织,包括像 Docker 和 Hashicorp 这样的突出的公司已经开始在项目中使用该语言取得圆满成功。

Tocy
Tocy
翻译于 2017/05/26 16:43
1

My First Go at Go

我写第一行 Go 程序大概是在 4 年前。一开始,我不得“要领”。这个语言似乎很有趣,程序员们都在吹嘘 Go 的好,但我对这些好处并没有什么概念。直到我把一个 Python 的真实项目移植到 Go,真实世界的需求才让我欣赏到 Go 的美妙。

我移植的项目是使用 Redis 实现的一个非常小的 REST API。它只是一个简单的缓存系统,把“不活动的”数据移动到磁盘上,而把“活动的”数据保留在 Redis 中。我需要一个简单的方法来分发这个 API 并配置 Redis 服务器,使其不会消耗大量的内存,并保持快速。使用 Go 后,发现它的 Spoiler Alert 非常适合这样的需求。

Viyi
Viyi
翻译于 2017/05/26 22:27
1

为什么 Go 是伟大的?

我认为 Go 是伟大的编程语言是很多原因。要是现实世界需要,我能够在几天内对一个生产系统进行原型设计、测试和部署,而且在每秒能处理比原来多 5 倍请求的情况下,CPU 和内存的开销还都很小。

这是因为 GO 很简单,只有一个非常小(但是很全)的标准库。我能够在几个小时内掌握绝大部分语言概念,内嵌包,和常用语句。

溪边九节
溪边九节
翻译于 2017/05/26 18:07
1

除此之外,Go 还有一些其它东西:

  • 静态类型

  • 编译

  • 单独的二进制发布

  • 垃圾回收

  • 内置并发和原语

  • 可以连接到流行的 C 库

  • 丰富的文档

  • 拥有一个充满活力并持续成长的社区

Zapier 一开始是一个 Python 商店。当上面所列的内容只有部分能在 Python 中实现的时候,实现了整个列表的 Go 显得非常吸引人。我们每小时要处理数以千计的 API 调用,性能对于我们来说非常重要。那么为什么不换用 Go 呢?

Viyi
Viyi
翻译于 2017/05/26 22:39
2

为什么 Go 并不太好

没有完美的编程语言;一切都需要权衡。Go 在编译速度和应用程序性能上很优秀,但这是以程序员的生产效率作为代价的。

在权衡的过程中,最有争议的是 Go 提供了静态类型系统,但却没有泛型。这就是说,容器类数据结构除列表和哈希表之外,不能摆脱对未知类型指针( interface{} 类型)的类型转换。

Viyi
Viyi
翻译于 2017/05/26 22:44
1

Go 还有一些不利于编程的东西:

  • 使用第三方代码会让依赖管理变得困难。

  • 类型系统很简单,但与经典的面向对象和继承模型有很大不同。它非常像 C。结构 + 接口。没有类。没有继承。

  • 没有规范的异常或 try/catch。这可能被认为是一种正面的架构,但 Go 经常让开发者们跌进其 panic(严重错误)/recover(恢复) 系统。

  • 有些人认识垃圾回收并适不用于像 Go 这样的系统编程语言。我是喜欢垃圾回收的那类人。

Viyi
Viyi
翻译于 2017/05/26 22:52
2

Go! 用在哪里比较好?

Go 非常适合系统编程。它被吹捧为中级语言,介于像 C 这样的低级语言和像 Python 这样的高级语言之间。这里列了一些 Go 适合构建的应用类型:

  • 命令行应用

  • 网络服务

  • Daemons(守护进程)

  • 数据库

但是,甚至有人用它做这些事情:

  • 嵌入式开发

  • 轻量级的微服务

  • 基础设施

Go 足够灵活可以解决大多数问题,甚至有时候会比其它语言做得更好。这里有一个使用 Go 的公司列表,让人印象深刻,它包括 Docker、Cloudflare、Dropbox、Intel、Hashicorp,当然,还有 Google。

Viyi
Viyi
翻译于 2017/05/26 22:58
1

然而… 为什么 Zapier 仍然不使用它?

Zapier 是构建于 Python 和 Django 之上庞大的单体应用。它有大量使用 Python 完成的关键点,很难在在服务运行的时候无缝切换到其它编程语言,虽然这并不是不可能!

我们在非常(非常!)早的阶段把整个应用拆分成微服务架构。这些服务是按需执行。然而,一旦我们发现某个系统达到临界状态需要高性能重写的时候,我认为 Go 是一个选择。我们会遵循一个流程:

Viyi
Viyi
翻译于 2017/05/26 23:05
0
  1. 衡量当前系统并确定瓶颈。

  2. 针对这个瓶颈制定 Go 的解决方案。

  3. 在产品中把这个解决方案作为 canary service 进行衡量。

  4. 启动所有事情

  5. (废除并)替换

采用某种编程语言是个困难的决定,Go 并不是我们唯一考虑的语言。列表中还有别的一些语言,同样存在着优点/缺点:

  • Elixir (在 Erlang VM 中)

  • Rust

  • Python 3 (我知道很疯狂!)

  • PyPy

  • Cython

Viyi
Viyi
翻译于 2017/05/26 23:12
1

综上所述:Go 是个非常棒的编程语言,我们可以用它来构建高性能系统。在像大多数语言那样进行权衡的时候,重点考虑的是稳定和易于使用。Go 学起来很容易,多数程序员在使用数周后都能使用它高效地编程。

也许有一天你会读到另一篇文章,提到我们使用 Go 开发 ZYX 替代了 XYZ。如果你愿意成为团队的一员,考虑可能使用的新语言并改进我们现有的应用的话,来看看我们的职位

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

评论(23)

Viyi
Viyi

引用来自“叶少哲”的评论

每小时数以千计????翻译没问题?
原文:we work with thousands of API calls per hour
蓝天bluesky
蓝天bluesky
没有说清楚开发效率到底哪儿低了
潜心修炼呀
文章有点水。。
叶少哲
叶少哲
每小时数以千计????翻译没问题?
orpherus
orpherus

引用来自“八风不动”的评论

用 struct 和 function 模拟 class,我们当年开发 MTK 的时候也是这么搞的,我还用 struct+function 模拟过 STL 呢。
golang 从底层加了垃圾回收,又加了很多库,就显得高大上了。
go的多态不用模拟,已经是自动的了,只不过是通过结构体嵌套,不是继承,效果却是一样的
八风不动
八风不动
用 struct 和 function 模拟 class,我们当年开发 MTK 的时候也是这么搞的,我还用 struct+function 模拟过 STL 呢。
golang 从底层加了垃圾回收,又加了很多库,就显得高大上了。
开源中国-首席村长
开源中国-首席村长
然而谷歌爸爸并不爱它。。
进击的代码
进击的代码
go语言很适合对代码格式与风格严格要求的人,比如声明的变量必须使用不然直接提示错误,这让我在打断点调试的时候爽翻了.....
李学明
李学明
Python 3被黑的最惨的一次
OSC_VXGMkm
OSC_VXGMkm
感觉没好好使用go才写出这样的文章。根本就没理解go的设计思想和如何实战
返回顶部
顶部