Выбор ответа Middle net/http и middleware спрашивают часто обновлено
Порядок выполнения middleware
Вопрос
Есть h := A(B(C(mux))), где каждый middleware логирует «до» и «после» вызова next. В каком порядке появятся строки?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: A до, B до, C до, обработчик, C после, B после, A после. Внешняя обёртка получает запрос первой и вызывает следующую.
Варианты ответа
- A до, B до, C до, обработчик, C после, B после, A послеправильный ответ
- C до, B до, A до, обработчик, A после, B после, C после
- A до, A после, B до, B после, C до, C после
- Порядок не определён, middleware идут параллельно
Разбор
Внешняя обёртка получает запрос первой и вызывает следующую. Возврат идёт в обратном порядке, как раскрутка стека. Поэтому recover и логирование ставят снаружи, чтобы они видели всё, что внутри, а авторизацию ближе к роутеру. Параллельности между middleware одного запроса нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
MaxIdleConnsPerHost в http.Transport
Следующий вопрос
Параметры пути в ServeMux Go 1.22
Термины по теме
Ещё по теме «net/http и middleware»
- Статистика access-логов: ошибки и p95 на Go
- Разбор сырого HTTP/1.1 запроса на Go
- Разбор query-строки URL с декодированием на Go
- Маршрутизатор с параметрами пути в стиле ServeMux
- Rate limiter на токен-бакете для middleware на Go
- Зачем закрывать resp.Body
- Таймаут http.DefaultClient
- Обработчики net/http и горутины