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

Viyi,ViyiTocy,Tocy无若无若 · · 2807 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

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

Tocy
 翻译得不错哦!

My First Go at Go

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

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

Viyi
 翻译得不错哦!

为什么 Go 是伟大的?

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

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

无若
 翻译得不错哦!

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

  • 静态类型

  • 编译

  • 单独的二进制发布

  • 垃圾回收

  • 内置并发和原语

  • 可以连接到流行的 C 库

  • 丰富的文档

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

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

Viyi
 翻译得不错哦!

为什么 Go 并不太好

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

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

Viyi
 翻译得不错哦!

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

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

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

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

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

Viyi
 翻译得不错哦!

Go! 用在哪里比较好?

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

  • 命令行应用

  • 网络服务

  • Daemons(守护进程)

  • 数据库

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

  • 嵌入式开发

  • 轻量级的微服务

  • 基础设施

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

Viyi
 翻译得不错哦!

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

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

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

Viyi
 翻译得不错哦!
  1. 衡量当前系统并确定瓶颈。

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

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

  4. 启动所有事情

  5. (废除并)替换

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

  • Elixir (在 Erlang VM 中)

  • Rust

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

  • PyPy

  • Cython

Viyi
 翻译得不错哦!

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

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

Viyi
 翻译得不错哦!

有疑问加站长微信联系(非本文作者)

本文来自:开源中国翻译

感谢作者:Viyi,ViyiTocy,Tocy无若无若

查看原文:Go 很好,为什么我们不使用它? 【已翻译100%】

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2807 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传