Go для веба глазами PHP-разработчика
Обо мне
• Developer @ delodi
• Веб разработчик с 5+ лет стажем
• Стек технологий: PHP (Symfony) + MySQL + AngularJS
• t.me/osavchenko
• fb.com/savchenko
• delodi.net
Главные требования к приложению
• Безопасность
• Высокая скорость работы
• Простота (keep it simple)
• Golang
Выбор стека технологий
Выбор стека технологий
Самописное приложение — зачем?
• Преимущества:
• Контроль всех ресурсов
• Нет «избыточности»
приложения
• Недостатки:
• Изобретение своих
«велосипедов» для
«фундамента» приложения
• Требует больше времени на
разработку
Использование готовых веб-фреймворков
– зачем?
• Преимущества:
• Скорость разработки
• Лучшие практики от сообщества
• Есть реализация «базы»
• Есть комьюнити
• Недостатки:
• Риск неожиданного поведения
приложения (в т.ч. баги)
• Избыточность приложения
Поиск оптимального фреймворка
Поиск оптимального фреймворка
Поиск оптимального фреймворка
Поиск оптимального фреймворка
Поиск оптимального фреймворка
Почему Beego?
• MVC
Почему Beego?
• MVC
• ORM
Почему Beego?
• MVC
• ORM
• Routing
Почему Beego?
• MVC
• ORM
• Routing
• I18n
Почему Beego?
• MVC
• ORM
• Routing
• I18n
• Sessions
Почему Beego?
• MVC
• ORM
• Routing
• I18n
• Sessions
• Console tool
Почему Beego?
• MVC
• ORM
• Routing
• I18n
• Sessions
• Console tool
• Migrations
Возможные трудности
при использовании
Устаревшая документация
• Документация на сайте и API
фреймворка не соответствуют
действительности
• Нет возможности увидеть дату
генерации документации или
под какую версию она сделана
• Нужно изучать исходники
и/или шерстить интернет
Часть документации на китайском
Неожиданное поведение компонентов
• Обработка форм игнорирует пустые поля
Проблема конфигурирования
подключения к БД
• По умолчанию, migration CLI
использует bee.json
• По умолчанию, приложение
использует conf/app.conf
• Изменить конфигурацию
приложения, чтобы то
использовало json
• Дублирование конфигурации
Шаблонизатор
• Нет нормальной поддержки в
JetBrains Gogland
• Есть хорошая поддержка в Atom
ORM
• Избавляет от надобности писать
прямые SQL запросы
• Принуждает к дополнительному
коду и усложнению моделей
Актуальность релизов на GitHub
Структура директорий Go
GOROOT
bin
pkg
src
GOROOT/src
github.com
• beego
• dep
my_project
readme.md
…
Pre-requirements:
• go get github.com/astaxie/beego
• go get github.com/go-sql-driver/mysql
• go get github.com/beego/bee
• go get github.com/go-playground/form
…
Менеджер пакетов
а-ля composer/npm
• Официальный есть… но
экспериментальный
• Есть множество аналогов,
которые поддерживаются
различными системами,
например, heroku
Структура конечного проекта в live
nginx
Service 1
Database
Service 2
Database
Service 3
Database
Преимущества подхода
• Downtime минимален – пока подготавливается новая версия
старая всё ещё работает и пока переключается один сервис –
остальные всё ещё служат пользователям
• Кеширование статических файлов
• Реализация HTTPS на стороне nginx
Итоги
• Go для классических веб-приложений – не подходит
• Если делать stateless API – должно работать хорошо
• Реализация больших проектов в одном приложении – сложно и
беспощадно
Вопросы?
Спасибо!

Go для веба глазами PHP-разработчика