Что такое poisoning

«Что такое poisoning» — вопрос из категории Безопасность, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Poisoning в Go — это ситуация, когда горутина блокируется навсегда из-за ошибки в коде, например, при работе с каналами.

Пример:

func worker(ch chan int) {
    for {
        select {
        case v := <-ch:
            fmt.Println(v)
        // Нет default, и если канал закрыт, горутина зависнет
        }
    }
}

Как избежать:

  1. Всегда проверяйте, открыт ли канал:
v, ok := <-ch
if !ok { return }
  1. Используйте context для отмены.
  2. Добавляйте default в select, если нужно неблокирующее поведение.

Poisoning может привести к утечкам памяти и зависанию программы.