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 併發模式:超時、繼續前進
部落格索引