Sobes.tech
Назад к вопросам
Senior
8

Расскажи про использование событий (event-driven подход) на твоём примере

Компании, где спрашивали
Холодильник.руХолодильник.ру

Ответ от нейросети

sobes.tech AI

В одном из проектов на Go я реализовывал event-driven архитектуру для обработки заказов в системе электронной коммерции. Основная идея заключалась в том, что при наступлении определённых событий (например, создание заказа, оплата, отгрузка) генерировались события, которые подписчики обрабатывали асинхронно.

Для этого я использовал каналы (channels) и горутины, чтобы отделить генерацию событий от их обработки. Например, при создании заказа событие отправлялось в канал, а отдельный воркер слушал этот канал и выполнял задачи, такие как уведомление пользователя, обновление статистики и т.д.

Пример кода:

package main

import (
    "fmt"
    "time"
)

type OrderEvent struct {
    OrderID string
    Type    string
}

func eventProducer(events chan<- OrderEvent) {
    events <- OrderEvent{OrderID: "12345", Type: "OrderCreated"}
}

func eventConsumer(events <-chan OrderEvent) {
    for event := range events {
        switch event.Type {
        case "OrderCreated":
            fmt.Printf("Обработка события создания заказа: %s\n", event.OrderID)
            // Дополнительная логика
        }
    }
}

func main() {
    events := make(chan OrderEvent)
    go eventConsumer(events)

    eventProducer(events)

    time.Sleep(time.Second) // Ждём обработки
}

Такой подход позволяет легко масштабировать обработку событий и добавлять новые подписчики без изменения генератора событий.