@Michail9

Корректно ли я обрабатываю ошибку из горутин?

Привет! У меня есть функция, в которой получаю апдейты от телеграм бота и вызываю в горутине функцию respond по обработке апдейта. Ошибки, возникающие в respond я отправляю в канал ошибок, а потом обрабатываю ошибки в селекте.

Верный ли такой подход обработки ошибок из горутин или есть более правильные методы?

errChan := make(chan error)

	for {
		updates, err := b.getUpdates(offset)
		....
		for _, upd := range updates {
	              ....
      		       go respond(upd, errChan)

			select {
			case err := <-errChan:
				log.Println("Error from channel:", err)
			default:
				continue
			}
		}
	}


В методе respond:

...
        message, err := s.GetMessage(upd.Message.Text)
	if err != nil {
		errChan <- err
	}
.....
  • Вопрос задан
  • 120 просмотров
Пригласить эксперта
Ответы на вопрос 1
Supme
@Supme
Просто системный администратор
Некорректно.
А почему бы в самой горутине в лог не писать?
Или нужна отдельная вечная горутина обрабатывающая ошибки.
В твоём случае смысла запускать горутину нет, у тебя цикл на канале блокируется, а если канал будет с буфером, то вообще непонятно что будет :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы