[БЕЗ_ЗВУКА] В этом видео мы рассмотрим еще один фреймворк под названием 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. Я не буду глубоко останавливаться на этом фреймворке, вы можете ознакомиться с документацией, но в целом, если вам нужно сделать что-то маленькое и быстрое, это неплохой выбор.