Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Emitter ¶
type Emitter[T any] interface { // Emit отправляет значение всем подписчикам. // Каждый подписчик выполняется в своей горутине асинхронно. // Параметр ctx передаётся каждому подписчику для поддержки отмены. Emit(ctx context.Context, value T) // Subscribe добавляет нового подписчика и возвращает функцию для отписки. // Подписчик будет получать все будущие события. // Функция отписки потокобезопасна и может быть вызвана в любой момент. Subscribe(subscriber Subscriber[T]) UnsubscribeFunc // Wait ожидает завершения обработки текущих событий всеми подписчиками. // Полезно для graceful shutdown — дождаться, пока все обработчики закончат работу. // Вызов Wait() не блокирует новые Emit. Wait() }
Emitter определяет контракт для издателя событий. Позволяет подписываться на события, отправлять их и ожидать завершения обработки.
func NewEmitter ¶
NewEmitter создаёт новый эмиттер событий для типа T.
Пример:
// Эмиттер для строк
strEmitter := NewEmitter[string]()
// Эмиттер для пользовательских типов
type Event struct { ID int; Data string }
eventEmitter := NewEmitter[Event]()
type Subscriber ¶
Subscriber представляет функцию-обработчик события. Вызывается для каждого полученного значения T. Параметр ctx — контекст, переданный в Emit (может использоваться для отмены). Параметр value — переданное значение.
Важно: подписчик выполняется в отдельной горутине. Если вам нужна синхронная обработка, организуйте её внутри подписчика (например, через каналы).
Пример:
subscriber := func(ctx context.Context, value string) {
select {
case <-ctx.Done():
log.Printf("Обработка отменена: %v", ctx.Err())
return
default:
process(value)
}
}
type UnsubscribeFunc ¶
type UnsubscribeFunc func()
UnsubscribeFunc — функция для отписки от событий. Вызов этой функции удаляет подписчика из эмиттера. Функция идемпотентна — повторные вызовы безопасны.
Пример:
unsubscribe := emitter.Subscribe(handler) defer unsubscribe() // отписка при выходе из функции