> Как отправляются события об изменении статусов? (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: InDrive

Стек: Go

> Пример ответа

В Go для отправки событий об изменении статусов чаще всего используются каналы (channels) или брокеры сообщений (например, NATS, RabbitMQ, Kafka). В простых случаях, когда статус меняется в рамках одного процесса, создается канал с типом события, например:

GO
type StatusEvent struct {
EntityID string
OldStatus string
NewStatus string
Timestamp time.Time
}
statusChan := make(chan StatusEvent, 100)

При изменении статуса в бизнес-логике событие отправляется в канал:

GO
func updateStatus(entityID, newStatus string) {
oldStatus := getCurrentStatus(entityID)
// ... логика обновления ...
statusChan <- StatusEvent{
EntityID: entityID,
OldStatus: oldStatus,
NewStatus: newStatus,
Timestamp: time.Now(),
}
}

Отдельная горутина-слушатель обрабатывает события (логирование, уведомления, триггеры). Для распределенных систем используется брокер: продюсер публикует сообщение в топик (например, "status.changes"), а консюмеры подписываются и обрабатывают. В Go для этого применяются клиентские библиотеки (sarama для Kafka, nats.go для NATS). Важно учитывать идемпотентность обработки и гарантии доставки (at-least-once или exactly-once).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью