Sobes.tech
Back to questions
Middle
5

Как организовать связь между горутинами и как работать с дедлоками?

Companies where asked
VKVK

Answer from AI

sobes.tech AI

Связь между горутинами в Go обычно организуется через каналы (channels). Каналы позволяют безопасно передавать данные между горутинами и синхронизировать их работу.

Пример передачи данных через канал:

ch := make(chan int)
go func() {
    ch <- 42 // отправка значения
}()
val := <-ch // получение значения

Чтобы избежать дедлоков (deadlocks), нужно:

  • Убедиться, что для каждого отправителя есть получатель и наоборот.
  • Не блокировать горутину навсегда, ожидая данные, которые никогда не придут.
  • Использовать буферизированные каналы, если нужно избежать блокировки при отправке.
  • При использовании select предусматривать default или таймауты.

Дедлок возникает, когда горутина навсегда блокируется, ожидая событие, которое не произойдет. В Go runtime обнаруживает дедлок и выдает panic.