The Go Blog
Реальные Go-проекты: SmartTwitter и web.go
Эта статья написана 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: Окончание времени
ожидания, движение дальше
Индекс блога