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