Go 博客
Go 真实项目:SmartTwitter 和 web.go
本周文章由 Michael Hoisie 撰写。他是一名驻旧金山的程序员,是 Go 的早期采用者之一,也是几个流行的 Go 库的作者。他描述了自己使用 Go 的经历:
我是通过 Hacker News 上的一篇文章接触到 Go 的。大约一小时后我就迷上了。当时我在一家网络初创公司工作,一直在用 Python 开发内部测试应用。Go 提供了速度、更好的并发支持以及理智的 Unicode 处理,所以我渴望将我的程序移植到这种语言。那时还没有一种简单的方法来用 Go 编写网络应用,于是我决定构建一个简单的网络框架,取名 web.go。它模仿了我之前使用过的一个流行的 Python 框架,web.py。在开发 web.go 的同时,我参与了 Go 社区,提交了大量 bug 报告,并修改了一些标准库包(主要是 http 和 json)。
几周后,我注意到 web.go 在 GitHub 上受到关注。这很令人惊讶,因为我从未真正推广过这个项目。我认为简单、快速的网络应用有一个市场,而 Go 可以填补这个空白。
一个周末,我决定编写一个简单的 Facebook 应用:它会将您的 Twitter 状态更新重新发布到您的 Facebook 个人资料。Twitter 有一个官方应用可以这样做,但它会重新发布所有内容,在您的 Facebook Feed 中造成干扰。我的应用允许您过滤转发、提及、话题标签、回复等。这最终变成了 Smart Twitter,目前拥有近 9 万用户。
整个程序是用 Go 编写的,并使用 Redis 作为其存储后端。它非常快速和健壮。目前它每秒处理大约二十几条推文,并大量使用 Go 的 channel。它运行在一个拥有 2GB RAM 的单台虚拟机实例上,处理负载完全没有问题。Smart Twitter 使用的 CPU 时间很少,几乎完全受内存限制,因为整个数据库都保存在内存中。在任何给定时间,大约有 10 个 goroutine 并发运行:一个接受 HTTP 连接,另一个从 Twitter Streaming API 读取,几个用于错误处理,其余的处理 Web 请求或重新发布收到的推文。
Smart Twitter 还催生了其他 Go 开源项目:mustache.go、redis.go 和 twitterstream。
我认为 web.go 还有很多工作要做。例如,我想增加对流连接、WebSockets、路由过滤、共享主机中更好的支持,并改进文档。我最近离开了那家初创公司,开始做软件自由职业,并计划尽可能使用 Go。这意味着我可能会将其用作个人应用的后端,以及那些喜欢使用尖端技术的客户的项目。
最后,我要感谢 Go 团队所做的所有努力。Go 是一个优秀的平台,我认为它有一个光明的未来。我希望看到这门语言围绕社区的需求发展。社区里有很多有趣的事情正在发生,我期待着看到人们能用这门语言做出什么新的东西。
下一篇文章:调试 Go 代码(现状报告)
上一篇文章:Go 并发模式:超时,继续前进
博客索引