Junior — Middle
Em que condições ocorre o bloqueio ao trabalhar com o canal de transmissão de dados padrão?
sobes.tech IA
Resposta da IA
Em Go, o canal padrão de transmissão de dados bloqueia-se nos seguintes casos:
- Ao enviar um valor para o canal (
chan <- value), se o canal não tiver buffer ou se o buffer estiver cheio, a goroutine de envio bloqueia até que outro thread leia o valor. - Ao ler do canal (
value := <- chan), se o canal estiver vazio, a goroutine de leitura bloqueia até que haja dados disponíveis.
Assim, o bloqueio ocorre ao tentar enviar dados para um canal cheio ou ler de um canal vazio, garantindo a sincronização entre goroutines.
Exemplo:
ch := make(chan int) // canal sem buffer
// Envio bloqueia até que alguém leia
go func() {
ch <- 42
}()
val := <-ch // leitura desbloqueia o envio
fmt.Println(val)