Go 博客

真实 Go 项目:SmartTwitter 和 web.go

Michael Hoisie
2010年10月19日

本周的文章作者是 Michael Hoisie他是一位居住在旧金山的程序员,也是 Go 的早期采用者之一,同时也是几个流行 Go 库的作者。他描述了他使用 Go 的经历:

我通过 Hacker News 上的一篇文章了解到 Go。大约一个小时后,我就着迷了。当时我正在一家网络初创公司工作,并一直在用 Python 开发内部测试应用程序。Go 提供了更快的速度、更好的并发支持以及健全的 Unicode 处理,因此我迫切希望将我的程序移植到该语言。当时还没有一种简单的方法可以在 Go 中编写 Web 应用程序,所以我决定构建一个简单的 Web 框架,web.go。它的模型借鉴了一个流行的 Python 框架 web.py,我之前曾用过它。在开发 web.go 的过程中,我参与了 Go 社区,提交了许多 bug 报告,并对一些标准库包(主要是 httpjson)进行了修改。

几周后,我注意到 web.go 在 GitHub 上引起了关注。这让我感到惊讶,因为我从未真正推广过这个项目。我认为简单、快速的 Web 应用程序存在一个利基市场,而且我认为 Go 可以填补它。

一个周末,我决定写一个简单的 Facebook 应用程序:它可以将您的 Twitter 状态更新转发到您的 Facebook 个人资料。有一个官方的 Twitter 应用程序可以做到这一点,但它会转发所有内容,从而在您的 Facebook feed 中产生噪音。我的应用程序允许您过滤转推、提及、标签、回复等。最终,它变成了 Smart Twitter,该应用目前拥有近 90,000 名用户。

整个程序都用 Go 编写,并使用 Redis 作为其存储后端。它非常快速且健壮。目前,它每秒可以处理大约二十几个推文,并大量使用 Go 的通道。它运行在一个具有 2GB RAM 的单一虚拟专用服务器实例上,该服务器可以轻松处理负载。Smart Twitter 使用的 CPU 时间非常少,并且几乎完全受内存限制,因为整个数据库都保存在内存中。在任何给定时间,大约有 10 个 goroutine 在并发运行:一个接受 HTTP 连接,另一个从 Twitter 流式 API 读取,几个用于错误处理,其余的则处理 Web 请求或转发传入的推文。

Smart Twitter 还催生了其他开源 Go 项目:mustache.goredis.gotwitterstream

我认为 web.go 还有很多工作要做。例如,我想为流式连接、websockets、路由过滤器添加更好的支持,为共享主机提供更好的支持,并改进文档。我最近离开了这家初创公司,开始做软件自由职业,并计划尽可能使用 Go。这意味着我可能会将它用作个人应用程序的后端,以及用于喜欢使用尖端技术的客户。

最后,我想感谢 Go 团队付出的所有努力。Go 是一个出色的平台,我认为它拥有光明的未来。我希望看到该语言围绕社区的需求而发展。社区中有很多有趣的事情正在发生,我期待着看到人们能用该语言创造出什么。

下一篇文章:调试 Go 代码(状态报告)
上一篇文章:Go 并发模式:超时、继续前进
博客索引