The Go Blog

Реальные Go-проекты: SmartTwitter и web.go

Michael Hoisie
19 октября 2010

Эта статья написана Michael Hoisie. Программист, основанный в Сан-Франциско, он является одним из первых пользователей Go и автором нескольких популярных Go-библиотек. Он описывает свой опыт использования Go:

Меня познакомили с Go через пост на Hacker News. Через час я был захвачен. В то время я работал в веб-стартапе, и разрабатывал внутренние тестовые приложения на Python. Go предлагал скорость, лучшую поддержку параллелизма, и разумную работу с Unicode, поэтому я был заинтересован перенести свои программы на этот язык. В то время не было простого способа создавать веб-приложения на Go, поэтому я решил создать простой веб-фреймворк, web.go. Он был вдохновлён популярным Python-фреймворком, web.py, с которым я ранее работал. Работая над web.go, я вовлёкся в сообщество Go, отправил множество отчётов об ошибках и немного поэкспериментировал с некоторыми пакетами стандартной библиотеки (в основном http

После нескольких недель я заметил, что web.go начинает привлекать внимание на GitHub. Это было неожиданно, потому что я никогда не продвигал проект активно. Я думаю, существует ниша для простых, быстрых веб-приложений, и я считаю, что Go может занять эту нишу.

В один из выходных я решил написать простое приложение для Facebook: оно будет перепостить ваши обновления статуса с Twitter на ваш профиль в Facebook. Существует официальное приложение от Twitter для этой задачи, но оно перепостит всё, создавая шум в вашей ленте Facebook. Мое приложение позволяло фильтровать ретвиты, упоминания, хэштеги, ответы и другие элементы. Это превратилось в Smart Twitter, которое в настоящее время имеет почти 90 000 пользователей.

Весь код программы написан на Go и использует Redis.

В качестве бэкенда для хранения данных используется leveldb. Он очень быстрый и надежный. В настоящее время он обрабатывает около двух десятков твитов в секунду и активно использует каналы Go. Он запускается на одном виртуальном приватном сервере с 2 ГБ оперативной памяти, который с легкостью справляется с нагрузкой. Smart Twitter использует очень мало процессорного времени и в основном ограничен памятью, поскольку вся база данных хранится в памяти. В любой момент времени запущено около 10 горутин, работающих параллельно: одна принимает HTTP-подключения, другая читает данные из Twitter Streaming API, пара для обработки ошибок, а остальные либо обрабатывают веб-запросы, либо перепостят входящие твиты.

Smart Twitter также породил другие проекты с открытым исходным кодом на Go: mustache.go, redis.go, и twitterstream.

Я вижу много работы, которая осталась сделать в web.go. Например, я хотел бы добавить лучшую поддержку потоковых подключений, websockets, фильтры маршрутов, улучшенную поддержку на shared хостинге и улучшить документацию. Недавно я покинул стартап, чтобы заняться фрилансом в сфере программного обеспечения, и планирую использовать Go, где это возможно. Это означает, что, вероятно, я буду использовать его в качестве бэкенда для личных приложений, а также для клиентов, которые предпочитают работать с передовыми технологиями.

Наконец, хотелось бы поблагодарить команду Go за весь их труд. Go — это замечательная платформа, и я считаю, что у неё bright future (светлое будущее). Надеюсь, язык будет развиваться в соответствии с потребностями сообщества. В сообществе происходит множество интересных вещей, и я с нетерпением жду, увидеть, что люди смогут создать на этом языке.

Следующая статья: Отладка кода на Go (отчет о статусе)
Предыдущая статья: Шаблоны параллелизма в Go: Окончание времени ожидания, движение дальше
Индекс блога

GoRu.dev Golang на русском

На сайте представлена адаптированная под русский язык документация языка программирования Golang