Sobes.tech
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)