Назад к задачам
Junior — Senior
5

Менеджер публикаций‑подписок

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Требуется реализовать объект‑менеджер PubSub, предоставляющий два публичных метода:

  • Subscribe(id string) chan any — регистрирует подписку на канал с заданным идентификатором и возвращает канал, из которого подписчик может получать сообщения.
  • Publish(id string, msg any) — отправляет сообщение в канал с указанным id; все активные подписчики должны получить копию сообщения. Пример использования:
m := PubSubManager{}
msgChan := m.Subscribe("id1")
msgChan2 := m.Subscribe("id1")

m.Publish("id1", "hello world")
m.Publish("id1", "hi")
m.Publish("id1", "test")

log.Println(<-msgChan, <-msgChan, <-msgChan)   // prints: hello world, hi, test
log.Println(<-msgChan2, <-msgChan2, <-msgChan2) // prints: hello world, hi, test

type PubSubManager struct {
    // ...
}

func (m *PubSubManager) Publish(id string, msg any) {
    // ...
}

func (m *PubSubManager) Subscribe(id string) chan any {
    // ...
}