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 社区,提交了一堆错误报告,并对一些标准库包进行了黑客攻击(主要是 httpjson)。

几个星期后,我注意到 web.go 在 GitHub 上引起了关注。这很令人惊讶,因为我从来没有真正推广过这个项目。我认为,对于简单、快速的 Web 应用程序来说,存在一个利基市场,我认为 Go 可以填补这个空白。

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

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

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

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

最后,我要感谢 Go 团队的所有努力。Go 是一个很棒的平台,我认为它有一个光明的未来。我希望看到该语言围绕社区的需求发展。社区中有很多有趣的事情正在发生,我期待着看到人们用这门语言可以一起黑掉什么。

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