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