Гайды
Микросервисы на Go: Gin и Fiber
Маршруты и middleware, graceful shutdown, observability и чек-лист для HTTP API на Go.
~9 мин чтения
Микросервисы на Go: Gin и Fiber
Gin и Fiber — популярные HTTP-фреймворки для Go: маршруты, middleware, JSON binding. Go хорошо подходит для лёгких микросервисов с низкой задержкой. Паттерны — микросервисная архитектура; конкурентность — Go: горутины и каналы; устойчивость вызовов — Circuit breaker и retry.
1. Gin: скелет
r := gin.Default()
r.GET("/health", func(c *gin.Context) { c.JSON(200, gin.H{"ok": true}) })
r.Run(":8080")
Middleware — цепочка c.Next(), логирование, recovery, auth.
2. Fiber
Express-подобный API, быстрый роутер на fasthttp (внимание к совместимости с net/http middleware). Подходит для edge/API gateway слоёв.
3. Конфигурация и graceful shutdown
12-factor: env. signal.Notify + http.Server.Shutdown (Gin оборачивает net/http).
4. Observability
OpenTelemetry Go SDK — трассировки и метрики — см. OpenTelemetry.
5. Binding и валидация
Gin: ShouldBindJSON + ручная проверка или binding tags на структурах; для сложных правил — отдельный слой до хендлера. Fiber: BodyParser с тем же принципом. Возвращайте единый формат ошибок (JSON с полями полей), не стек в проде.
6. Контекст и отмена
Прокидывайте context.Context из входящего запроса (c.Request.Context()) в вызовы БД и HTTP-клиентов — отмена при обрыве клиента освобождает ресурсы. Не запускайте фоновые горутины без контекста и явного завершения при shutdown.
7. Тестирование
httptest.NewRecorder + роутер для интеграционных тестов без сети. Для Fiber учитывайте разницу с net/http при переиспользовании middleware с стандартной библиотеки.
8. Чек-лист
- Валидация входа (validator lib / generated).
- Лимиты тела запроса, таймауты сервера.
- Статический анализ (staticcheck, golangci-lint).
- Structured logging (slog/zap) с
request_idиз заголовка или middleware. -
ReadHeaderTimeoutи лимиты на заголовки против slowloris.
Дальше: gRPC на Python и Go