Go · 39 строк
Consumer получает события о списаниях по карте и шлёт клиенту push. Run работает в отдельной горутине, Stop вызывается при graceful shutdown пода.
Отметьте строки с ошибками.
В работе: Сервис уведомлений о списаниях по карте.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Плюс 1 вопрос про поведение программы — на зачёт не влияют. Ответ один на подход: после него показываем разбор.
Источник: на задачах Т‑Банка: уведомления о списаниях. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
package notifyimport "log"type Event struct {ClientID stringText string}// Consumer отправляет push о списаниях по карте.type Consumer struct {events chan Eventstopped bool}func NewConsumer() *Consumer {return &Consumer{events: make(chan Event, 1000)}}func (c *Consumer) Run(send func(Event) error) {for !c.stopped {select {case e := <-c.events:if err := send(e); err != nil {log.Printf("push %s: %v", e.ClientID, err)}default:}}}func (c *Consumer) Publish(e Event) {c.events <- e}// Stop вызывается из горутины graceful shutdown.func (c *Consumer) Stop() {c.stopped = true}