Sobes.tech
Middle

Как да предизвикаме паника при работа с канал? Какво се случва при операции с nil-канал и затворен канал?

sobes.tech AI

Отговор от AI

В Go паника при работа с канали възниква в следните случаи:

  • Изпращане на стойност към затворен канал (chan <- value) причинява паника.
  • Затваряне на вече затворен канал (close(chan)) причинява паника.

Що се отнася до nil-каналите:

  • Операциите за изпращане и получаване с nil-канал блокират завинаги (deadlock), но не причиняват паника.

Пример:

var ch chan int // nil-канал

// <-ch // блокира завинаги
// ch <- 1 // блокира завинаги

ch = make(chan int)
close(ch)

// ch <- 1 // паника: изпращане към затворен канал

close(ch) // паника: затваряне на вече затворен канал