emitter

package
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 23, 2026 License: MIT Imports: 3 Imported by: 0

README

emitter

import "github.com/Compogo/types/emitter"

Index

type Emitter

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()
}

func NewEmitter
func NewEmitter[T any]() Emitter[T]

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 Subscriber[T any] func(ctx context.Context, value T)

type UnsubscribeFunc

UnsubscribeFunc — функция для отписки от событий. Вызов этой функции удаляет подписчика из эмиттера. Функция идемпотентна — повторные вызовы безопасны.

Пример:

unsubscribe := emitter.Subscribe(handler)
defer unsubscribe() // отписка при выходе из функции
type UnsubscribeFunc func()

Generated by gomarkdoc

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

func NewEmitter[T any]() Emitter[T]

NewEmitter создаёт новый эмиттер событий для типа T.

Пример:

// Эмиттер для строк
strEmitter := NewEmitter[string]()

// Эмиттер для пользовательских типов
type Event struct { ID int; Data string }
eventEmitter := NewEmitter[Event]()

type Subscriber

type Subscriber[T any] func(ctx context.Context, value T)

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() // отписка при выходе из функции

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL