Sobes.tech
Middle

Como provocar pânico ao trabalhar com um canal? O que acontece durante operações com um canal nil e um canal fechado?

sobes.tech IA

Resposta da IA

Em Go, o pânico ao trabalhar com canais ocorre nos seguintes casos:

  • Enviar um valor para um canal fechado (chan <- value) causa um pânico.
  • Fechar um canal já fechado (close(chan)) causa um pânico.

No que diz respeito aos canais nil:

  • As operações de envio e recepção com um canal nil bloqueiam-se indefinidamente (deadlock), mas não causam pânico.

Exemplo:

var ch chan int // canal nil

// <-ch // bloqueia-se indefinidamente
// ch <- 1 // bloqueia-se indefinidamente

ch = make(chan int)
close(ch)

// ch <- 1 // panic: envio em canal fechado

close(ch) // panic: fecho de canal já fechado