# 21.5 Go 语言的其他应用

在前面的章节中，我们只讨论了 Go 在商业环境中已经使用的许多地方中的几个。其他一些使用 Go 的机构有：

1. [Canonical-Ubuntu 公司](http://www.canonical.com/)：使用 Go 开发后台基础设施，主要开发者为 Gustavo Niemeyer。例如项目 Ensemble（见 [参考文献 30]()）。

2. [FeedBooks](http://www.feedbooks.com/)：用 Go 发布电子书。
   
   FeedBooks 是一个电子书的发行商，它使用 Go 和 mgo 每天为超过一百万的图书出版提供服务。这是 Feedbooks 的研发工程师 Benoît Larroque 的一条评论：
   
   > “mgo（一个与 MongoDB 交流的 Go 库）使我们能够每天为超过 100 万本图书出版提供服务，同时也降低我们的服务器负载。”
   
3. [Anchor-Orchestra](http://www.anchor.com.au/)：一个使用 Go 的分布式执行框架。这家公司的特点是高水平的服务器支持、配置应用程序设置、缓存和解决可扩展性问题。他们还可以与其他网站托管公司合作，专业地设置负载平衡、数据库集群和虚拟环境。

   为此，他们使用 Go 开发并使用 Orchestra 分布式执行框架。

   （更多信息：http://www.anchor.com.au/blog/2011/08/the-automation-waltz/）

4. [开放知识基金会](http://eris.okfn.org/ww/2011/03/gockan)。

   这个组织使用 Go 进行（元）数据目录的聚合和数据链接。所有现有的软件都是用 Python 写的，所以开发者可以对两者进行比较。他们的结论是：
   
   - Go *很简单*。一旦通过了最初浅显的学习弯道，它就会像 Python 一样方便、舒适地运行。唯一的缺点是没有像 Python 那样多的库。
   - Go 是一种*静态类型的语言*。这似乎是一个深奥的细节，但它有一些重要的影响。在 Python 中的许多编程涉及到大量的单元和功能测试，这可能是一个相当大的负担，尽管 CKAN 测试套件有了一些重大的改进，但需要相当长的时间来运行。然而你很快就会发现，许多测试基本上是在测试动态类型 (duck typing) 和可变实体 (variable existence)（例如，当你在重构中重命名一个变量时，不确定你是否正确地重命名了一切）。在像 Go 这样的语言中，这些东西都是由编译器捕获的，不需要单独的测试。这意味着*你可以少写一些测试，因为编译器本身就是一个相当强大的测试套件。*
   - 尽管它是一种编译语言，但编译过程非常快，*写-编译-测试 的循环并不比 Python 中的 写-测试 循环慢*，因为需要运行的测试较少，如同上文所说，这个循环被进一步压缩了。
   - Go *远比 Python 更节省内存*……差别是惊人的。
   - 与 Python 相比，Go 作为一种经过编译和类型检查的语言，它的*速度很快*。
   - Go 不是面向对象的，至少与 Python 的意义不同。相反，它有一个接口的概念。这使得*设计更加简洁*，因为它不鼓励复杂的多重继承类的层次结构……接口就感觉更干净一些。
   - Go 有*内置的并发性*。在这项工作中，有很多并行的机会，这是好的。

5. [Tinkercad 公司](http://tinkercad.com/)：这家由 Kai Backman 创办的芬兰公司正在设计用于在浏览器/云端进行 3D 实体建模和打印的软件，其在客户端使用 WebGL 进行渲染。观看 [视频](http://www.youtube.com/watch?v=5aY4a9QnLhw) 了解关于这个主题的技术讲座。这是 Kai 的一句评价：

   > “目前（2011 年）Go 可能是编写并发服务器的最佳语言。”

6. [Clarity Services Inc.](http://www.clarityservices.com)：该公司是一家实时的信用机构，其使用 Go 语言对信用申请进行基于事件的后期处理。

7. [Cablenet 通信系统有限公司](http://www.cablenet.com.cy/en/)：这家塞浦路斯的 cablenet 供应商用 Go 开发了一个内部供应系统。

8. [Tonika](http://pdos.csail.mit.edu/~petar/5ttt.org/)：是一个用 Go 开发的、开源安全网络社交平台。

9. [Medline](http://eris.okfn.org/ww/2011/05/medline/)：使用 Go 的 XML 解析器来将Medline（医学期刊的数据）的压缩 XML 文件转化到 RDF。

10. [Iron.io](www.iron.io)：构建云基础设施软件。

    它用 Go 开发的第一个产品是 SimpleWorker，一个大规模的后台处理和调度系统；他们也在使用 Go 进行其他服务。

11. [SmartTweets](http://www.facebook.com/apps/application.php?id=135488932982)：一个用Go开发的 Facebook 应用程序。这个应用程序将你的 Twitter 状态更新转贴到你的 Facebook 主页上，并允许过滤转发、提及、标签、回复等内容。

    该应用程序现在有超过 12 万名用户。

    > “这是一种稳定的语言，”Michael Hoisie 说，“它可以处理负载。”

12. 在 [Sandia 国家实验室](http://www.sandia.gov/about/index.html)，一个美国开发支持国家安全的基于科学的技术的政府机构，有很多曾经从事过编程的人都在使用这种语言。很多过去使用 C、C++、Perl、Python 或其他什么 HPC 管理软件的人，已经转而使用 Go，并且不打算回头了。

    > Go 在效率、语言能力和编写代码的便利性之间找到了一个好的位置。
    >
    > <p style="text-align:right">—— Ron Minnich</p>

13. [Carbon Games](http://carbongames.com/)：一家网络游戏公司，为他们的后台服务使用 Go。

14. [Vaba软件公司](http://vabasoftware.com/)：用 Go 重写了他们的消息和存储引擎。

15. [Institute for Systems Biology](http://systemsbiology.org/)：用 Go 开发了分布式计算分析系统 [*Golem*](http://code.google.com/p/golem/)。

16. [Second Bit](http://www.secondbit.org/)：使用 Go 来驱动他们的 2cloud 服务。

17. [Numerotron Inc](http://www.stathat.com/)：用 Go 开发了他们的统计和事件跟踪系统 *StatHat*。

最后是谷歌公司本身，它是 Go 的（发明者）之家。

Go 在谷歌内部的使用是相当保密的，但在 2010 年 5 月，Rob Pike 宣布 Google 的后端基础设施正在运行用  Go 构建的应用程序（[参考文献 27]()）。Go 被用于一些系统（网络服务器，也包括存储系统和数据库），这些系统在跨越谷歌全球数据中心网络的分布式基础设施中发挥着作用。Go 可能会在未来几年内成为谷歌的标准后端语言。Andrew Gerrand 还说，谷歌员工正在使用 Go 来简单地从服务器上抓取信息。

> “谷歌有管理应用程序和服务的人，他们需要编写工具来抓取几千台机器的状态并汇总数据，”他说，“以前，这些操作人员会用 Python 写这些东西，但他们发现 Go 在性能和实际写代码的时间方面要快得多。”

关于 Go 在企业中的使用情况，可以在 http://go-lang.cat-v.org/organizations-using-go 上找到一个全面的清单。

- [目录](directory.md)
- 上一节：[Camilistore：一个可寻址内容存储系统](21.4.md)
- 下一节：[附录](Appendices.md)
