Go 部落格

真正的 Go 專案:SmartTwitter、web.go

Michael Hoisie
2010 年 10 月 19 日

這篇文章由 Michael Hoisie 所撰寫。他是一位來自舊金山的程式設計師,是 Go 的早期採用者,也是許多熱門 Go 函式庫的作者。以下是他使用 Go 的經驗:

我透過一篇在 Hacker News 上的文章認識 Go。大約一小時後我就上癮了。當時我在一家網路新創公司上班,並且使用 Python 來開發內部測試應用程式。Go 能夠提供更快的速度、優異的多執行緒支援和完善的 Unicode 處理,所以我非常期待將我的程式移植到這門語言。當時還沒有簡單的方法可以使用 Go 來撰寫網頁應用程式,所以我決定建構一個簡單的網頁框架,web.go。它的設計範例是一個我之前使用過的熱門 Python 框架,web.py。在開發 web.go 的過程中,我加入了 Go 社群,提交了一堆臭蟲報告,還修改了一些標準函式庫套件(主要是 httpjson)。

幾個星期後,我注意到 web.go 在 GitHub 上受到矚目。這令我感到驚訝,因為我從來沒有宣傳過這個專案。我認為簡單、快速的網頁應用程式有它的利基市場,而 Go 可以滿足這個需求。

一個週末,我決定寫一個簡單的 Facebook 應用程式:它會將你的 Twitter 狀態更新重新發佈到你的 Facebook 個人資料頁。有一個官方的 Twitter 應用程式可以執行此功能,但它會將所有內容重新發佈,在你的 Facebook 動態消息中製造噪音。我的應用程式允許你濾除推文、提到、標籤、回覆等。這變成了 Smart Twitter,目前有將近 90,000 個使用者。

整個程式是用 Go 編寫的,並使用 Redis 作為其儲存後端。它非常快速且穩健。它目前每秒處理大約兩打條推文,並大量使用 Go 的通道。它在具有 2GB RAM 的單一虛擬私人伺服器執行個體上執行,在處理負載方面沒有問題。Smart Twitter 使用非常少的 CPU 時間,而且幾乎完全受記憶體限制,因為整個資料庫都保存在記憶體中。在任何給定的時間,都有大約 10 個 Goroutine 同時執行:一個接受 HTTP 連結,另一個從 Twitter 串流 API 讀取,一對用於錯誤處理,其餘的則處理網路請求或重新發佈收到的推文。

Smart Twitter 還衍生了其他開源 Go 專案:mustache.goredis.go,以及 twitterstream

我認為在 web.go 上還有很多工作要做。舉例來說,我想增加對串流連線、Websocket、路由濾鏡、在共用主機上的更好支援,以及改善文件。我最近離開新創公司從事軟體自由工作,我計畫在可行的情況下使用 Go。這表示我可能會把它用作個人應用程式的後端,以及作為喜歡使用尖端技術之客戶的解決方案。

最後,我要感謝 Go 團隊的努力。Go 是個很棒的平台,我相信它有光明的未來。我希望看到這門語言圍繞社群的需求成長。社群中發生許多有趣的事情,我期待看到人們可以用這門語言做些什麼。

下一篇文章: 除錯 Go code(狀態報告)
上一篇文章: Go 並行模式:計時,繼續前進
部落格索引