Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 210новых вакансий за сутки·93 612вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 266
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 126
  • Облачные технологии14 083
  • QA вакансии3 456
  • Backend вакансии2 115
  • Инженер данных1 809
  • Продакт-менеджер1 261

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии986
  • AI вакансии950
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 688
  • Java6 537
  • Node.js2 026
  • .NET1 722
  • Kotlin1 611
  • Rust1 458
  • C#710
  • PHP682
  • C++571

DevOps и инфраструктура

  • Kubernetes7 772
  • DevOps вакансии6 054
  • Linux-инфраструктура5 493
  • Terraform / IaC4 275
  • CI/CD3 239
  • Мониторинг и Observability1 790
  • SRE568
  • Кибербезопасность458

Аналитика и данные

  • Data Scientist1 143
  • Бизнес-аналитик923
  • Аналитик данных857
  • Системный аналитик152

Другие направления

  • Проджект-менеджер620
  • UI/UX дизайн146
  • Ручное тестирование14

По регионам

  • Вакансии в США44 276
  • Вакансии в Европе23 819
  • Вакансии в Канаде4 471
  • Работа в России3 904

По формату

  • Удалённые вакансии74 928
  • Релокация в США44 273
  • Гибридная работа12 388
  • Офисная работа7 083

По уровню

  • Senior вакансии42 625
  • Middle вакансии20 854
  • Junior вакансии6 721

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме EchoВсе вопросы
EchoMiddleКодинг

Как определить и зарегистрировать middleware в Echo?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Middleware в Echo — функция (echo.HandlerFunc) echo.HandlerFunc; регистрируется глобально через e.Use(), на группу через group.Use() или на конкретный маршрут третьим аргументом.

Написание своего middleware

package middleware

import (
	"time"

	"github.com/labstack/echo/v4"
)

// RequestTimer измеряет время выполнения запроса
func RequestTimer() echo.MiddlewareFunc {
	return func(next echo.HandlerFunc) echo.HandlerFunc {
		return func(c echo.Context) error {
			start := time.Now()

			// Логика "до"
			err := next(c) // вызов следующего хендлера

			// Логика "после"
			c.Logger().Infof("%s %s — %v",
				c.Request().Method,
				c.Request().URL.Path,
				time.Since(start),
			)
			return err
		}
	}
}

Middleware в Echo: определение и регистрация

Middleware в Echo — это функция с сигнатурой func(echo.HandlerFunc) echo.HandlerFunc. Она получает следующий хендлер в цепочке и возвращает новый хендлер, оборачивающий его логикой до/после.

Уровни регистрации

1. Глобальный middleware — e.Use()

e := echo.New()

// Применяется ко ВСЕМ маршрутам
e.Use(middleware.Logger())
e.Use(middleware.Recover())
e.Use(middleware.CORS())
e.Use(RequestTimer())

2. Middleware на группе маршрутов

// Только для /api/* маршрутов
api := e.Group("/api")
api.Use(middleware.KeyAuth(func(key string, c echo.Context) (bool, error) {
	return key == os.Getenv("API_KEY"), nil
}))

api.GET("/users", listUsers)
api.POST("/users", createUser)

// Вложенная группа с дополнительным middleware
admin := api.Group("/admin")
admin.Use(requireAdminRole)
admin.DELETE("/users/:id", deleteUser)

3. Middleware на конкретном маршруте

// Middleware передаётся после хендлера как дополнительные аргументы
e.GET("/secret", secretHandler,
	middleware.BasicAuth(func(user, pass string, c echo.Context) (bool, error) {
		return user == "admin" && pass == "pass", nil
	}),
)

Встроенные middleware из echo/middleware

  • middleware.Logger() — структурированный лог запросов.
  • middleware.Recover() — перехват паник, возврат 500.
  • middleware.CORS() — заголовки CORS с конфигом middleware.CORSConfig.
  • middleware.JWT(secret) — проверка Bearer-токена, claims в c.Get("user").
  • middleware.RateLimiter() — ограничение RPS через in-memory store.
  • middleware.Gzip() — сжатие ответов.
  • middleware.RequestID() — генерация X-Request-ID.
  • middleware.BodyLimit("2M") — ограничение размера тела.

Middleware с конфигурацией

e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
	AllowOrigins: []string{"https://talento.work", "https://app.talento.work"},
	AllowMethods: []string{http.MethodGet, http.MethodPost, http.MethodPut, http.MethodDelete},
	AllowHeaders: []string{echo.HeaderContentType, echo.HeaderAuthorization},
	AllowCredentials: true,
}))

Передача данных между middleware и хендлером

// Middleware записывает данные
func SetUserID() echo.MiddlewareFunc {
	return func(next echo.HandlerFunc) echo.HandlerFunc {
		return func(c echo.Context) error {
			c.Set("userID", "123") // ключ-значение в контексте
			return next(c)
		}
	}
}

// Хендлер читает данные
func handler(c echo.Context) error {
	userID := c.Get("userID").(string)
	return c.JSON(http.StatusOK, map[string]string{"user": userID})
}

Подводные камни

  • Порядок регистрации = порядок выполнения: первый e.Use() — самый внешний. Logger должен идти до Recover, чтобы логировать даже паникующие запросы.
  • Middleware на группе не наследуется: middleware добавленный к e.Group("/api") не действует на маршруты, зарегистрированные прямо на e.
  • Middleware до регистрации маршрутов: e.Use() должен вызываться до e.GET/POST — иначе существующие маршруты не увидят middleware в некоторых сценариях.
  • c.Set() не потокобезопасен: запись и чтение из горутин без синхронизации вызывает гонку данных.
  • Middleware пропускает ошибку: если middleware не вызывает next(c), хендлер не выполняется — легко случайно заблокировать все запросы.
  • RateLimiter in-memory: встроенный RateLimiter не работает в multi-instance деплое — нужен Redis-бэкенд или внешний rate limiter.
  • CORS и Preflight: CORSWithConfig должен быть зарегистрирован до аутентификационного middleware, иначе OPTIONS-запросы будут отклоняться до проверки CORS-заголовков.
  • Паника в middleware: если Recover не первый в цепочке, паника в предшествующем middleware не будет перехвачена.

Частые вопросы на собеседовании

  • В каких backend-проектах Echo (Go framework) является сильным выбором, а где лучше выбрать более простой или другой стек?
  • Как реализовать middleware JWT-аутентификации в Echo?
  • Как Echo обрабатывает CORS и как его настроить?
  • Как настроить TLS/HTTPS в Echo?

Типичные ошибки

  • Давать ответ про регистрация middleware в Echo только на уровне определения, не показывая поведение в реальном приложении.
  • Игнорировать границы ответственности вокруг темы «регистрация middleware в Echo»: кто отменяет работу, кто владеет ресурсом и где формируется ответ клиенту.
  • Не связывать регистрация middleware в Echo с observability, тестированием или безопасностью, когда это влияет на продакшен-поведение.

Что проверяет интервьюер

  • Точно объясняет, что именно делает регистрация middleware в Echo и где это используется в Go-коде.
  • Связывает регистрация middleware в Echo с корректным lifecycle запроса, отменой, конкурентностью или конфигурацией сервера там, где это уместно.
  • Не изобретает API и опирается на реальные контракты официальной документации.

Как вы знаете этот вопрос?

Проверить себя по теме Echo →

Источники

  • https://echo.labstack.com/docs/middleware
  • https://echo.labstack.com/docs/routing
←Предыдущий вопросЧто такое фреймворк Echo и каковы его основные возможности?Следующий вопрос→Как писать unit-тесты для обработчиков Echo с помощью `httptest`?

Связанные темы

EchoCodingechoMiddlewarerequest-lifecycle