[БЕЗ_ЗВУКА] В
этом видео мы рассмотрим еще один фреймворк под названием Gin.
Он один из самых популярных в Go, у него очень много звезд на GitHub.
Также он считается одним из самых быстрых web-фреймворков для данного языка.
В частности, это достигается благодаря используемому роутеру,
который мы уже рассматривали — HTTP-роутер.
Благодаря ему ну и благодаря своим оптимизациям он работает очень быстро.
Теперь давайте посмотрим код.
Gin — он не настолько вещь в себе,
как Beego, хотя тоже у него свой контекст,
через который происходят все операции с запросом.
Например, чтобы отдать в ответе какой-то строковый параметр,
мы можем использовать функцию String прямо из контекста
и написать туда статус запроса и какой-то текст.
Gin, помимо этого, предоставляет некоторое количество middleware, то есть,
например, у него из коробки есть логгер, у него есть восстановление после паники.
Благодаря тому, что он построен на хорошем роутере,
он сразу может из коробки принимать параметры в роутах.
У него есть встроенная basic-авторизация.
Можно создавать группу роутов
и на нее навешивать цепочки уже middleware — те, которые вам нужны.
Давайте по порядку.
Вот пример, в котором я получаю параметр,
ищу его значение в мапе, параметра из роута, и потом отдаю в json.
Обратите внимание: c — это контекст, и всего лишь одна функция,
для того чтобы отдать json туда наверх вместе со статусом ответа.
Рассмотрим это в коде.
User — rvasily.
Так, запустим сервер.
Так, запустили.
Вот. Мне выдало,
что сейчас никаких значений нет, потому что их действительно там нет.
При этом у меня в лог записалось,
что произошел запрос на страницу юзера с такого-то IP-адреса,
занял время нисколько, получил успешный ответ ну и нет,
то есть очень важная информация для логирования, действительно.
Давайте посмотрим дальше, давайте посмотрим,
каким образом воспользоваться basic-авторизацией.
Так, admin &key=123.
Так, имя пользователя, какое у меня имя пользователя?
А, да, 100500.
rvasily, 100500, авторизуемся.
И отлично.
Теперь мне выдало большую ошибку — на самом деле я ее выдал.
Что это за ошибка?
Рассмотрим код.
Дело в том, что в Gin еще встроен валидатор параметров
— это тоже внешняя библиотека, как и роутер,
но Gin ее хорошо интегрирует в себя.
Вот у меня есть функция Bind, у меня есть, собственно,
моя структура с параметрами, есть ключ из формы,
который я получаю, либо из query, либо именно из формы, есть из json.
И в binding у меня указано, что это поле — required,
то есть оно должно быть передано в запросах действительно.
Если это поле не передано, я ругаюсь ошибкой — то,
что вы как раз видели сейчас на экране.
Теперь попробуем передать туда уже, собственно,
user_key — оно у меня имеет тип int, поэтому я напишу вот так.
Ага, опять ошибка.
То есть я там ожидаю только int, чтобы мне передали, а он мне говорит,
что ParseInt нет, пожалуйста, int.
Давайте запишем 42 туда.
Отлично.
Теперь мой запрос наконец-таки прошел валидацию, и 42 выставилось в значении.
Еще раз посмотрим на юзера, и там значение 42, которое я передал.
Все это прописано как раз через Gin.
Я не буду глубоко останавливаться на этом фреймворке,
вы можете ознакомиться с документацией, но в целом,
если вам нужно сделать что-то маленькое и быстрое, это неплохой выбор.