🦄 Объясняю мир Go для фронтэндеров
Вопрос из комментариев: я только вкатываюсь в го из фронтенда, вокруг го нет зоопарка фреймворков для написания бекенда? Бегло пробежавшись по реддит обнаружил, что в основном все на го пишут без какого либо фрейма
Очень хороший вопрос, ответ на него достоин отдельного поста.
❤️Этот пост написан не с целью поглумиться над коллегами из мира фронтэнда, а для того чтобы рассказать им, за что мы любим экосистему Go
Да, мир Go намного проще — фреймворков тут вовсе нет (за редкими исключениями, но такое тут не любят). Если вы решили перекатиться в Go, можете наконец-то спокойно вздохнуть и расслабиться — вам достаточно изучить сам язык, при чём сделать это
крайне просто.
Вам больше не нужно гнаться за зоопарком фреймворков, каждый из которых в изучении намного сложнее самого языка, как в JS/TS экосистеме. Я понимаю о чём говорю, ведь я сам когда-то писал на Vue.js, который далеко не самый сложный фронтэнд-фреймворк.
И это намеренный дизайн языка, а не недостаток. Go создавался с философией "батарейки включены" — стандартной библиотеки обычно достаточно для большинства задач. А если что-то и подключается дополнительно, то больше для удобства, да и делать библиотеки стараются как можно более минималистичными, потому что это ценится в первую очередь.
- Хотите HTTP сервер?
net/http из стандартной библиотеки.
- Роутинг? Есть лёгкие библиотеки вроде того же
chi (по нему у меня, кстати, есть
очень подробный практический гайд). К тому же, стандартная библиотека сама
движется в правильную сторону в этом плане (на самом деле, даже сейчас часто достаточно её функционала).
- Работа с БД?
database/sql + драйвер для вашей БД, и вы готовы.
Ситуация, знакомая многим фронтендерам:
1. Решили написать новый проект
2. Какой фреймворк выбрать? Next.js? Nuxt? А может Angular или React? (простите, я безнадёжно отстал от этих трендов..)
3. Пока выбираете, уже вышли новые версии без обратной совместимости, которые надо изучать с нуля, да ещё и новые фреймворки 😩
В Go такого нет. Вообще.
Конечно, существуют фреймворки вроде
Gin,
Echo,
Fiber. Но это скорее расширенные роутеры с удобными хелперами — намного легче React или Angular. На самом деле, тот же Gin считается "слишком сложным", из-за чего многие смотрят в сторону
Chi (я в том числе).
Типичный бэкенд на Go обычно состоит из:
- Стандартной библиотеки
- Нескольких небольших библиотек для конкретных задач
- Вашего кода, который всё это связывает
И главное — эти библиотеки стабильны.
Они не меняют API каждый месяц и не выкидывают breaking changes в минорных версиях.
Основные библиотеки, которые пригодятся:
- Роутеры: chi, gorilla/mux и др.
- БД: sqlx (есть и ORM, например GORM, но от такого тут многие плюются)
- Валидация:
validator- Конфигурация:
cleanenv, viper и др.
- Логирование: zap, logrus, zerolog и др.
- Тестирование: встроенный testing +
testifyИ всё! В 90% случаев этого набора достаточно. Изучать их можно по мере необходимости, а не всё сразу.
Гибкая структура проекта
Ещё один приятный бонус: в Go почти нет строгих конвенций по структуре проекта. Нет жёстких правил "куда положить модель, а куда контроллер". Это выбирается исходя из задач конкретного проекта.
Статическая типизация
Если вы привыкли к TypeScript, то типизация в Go вам понравится. Она статическая, но сильно проще, чем в C++ или Java.
Для фронтендеров я вижу два пути:
1. Минималистичный: net/http + chi + sqlx. Лёгкий вход и сразу понятно, что происходит.
2. Привычный: Gin или Echo — они ближе к Express.js по ощущениям.
Я бы рекомендовал первый вариант — так вы действительно прочувствуете Go. Тем более, по нему у меня есть
максимально подробный гайд. Если же вы хотите окунуться сразу в gRPC, то там всё немного иначе, но тоже не сложно, и на эту тему у меня также есть аналогичный
большой гайд.
Поверьте, когда вы напишете свой первый проект без необходимости выбирать между 15 фреймворками и беспокоиться, что выбранный вами устареет через полгода, вы испытаете настоящее облегчение и окончательно влюбитесь в Go.