Sobes.tech
Junior — Middle

Como funciona o mecanismo de gravação num canal com acesso restrito e o que acontece nesse processo?

sobes.tech IA

Resposta da IA

No Go, um canal com capacidade limitada (canal bufferizado) tem um tamanho de buffer fixo. Quando se escrevem dados no canal usando a operação chan <- value, o seguinte acontece:

  • Se houver espaço livre no buffer do canal, o valor é colocado no buffer e a operação de escrita termina imediatamente.
  • Se o buffer estiver cheio, a operação de escrita bloqueia até que alguém leia um valor do canal, liberando espaço.

Assim, um canal com buffer limitado fornece sincronização entre goroutines: a escrita bloqueia em caso de transbordamento, e a leitura em caso de buffer vazio.

Exemplo:

ch := make(chan int, 2) // buffer de 2 elementos

ch <- 1 // escreve, buffer: [1]
ch <- 2 // escreve, buffer: [1, 2]
// ch <- 3 // bloqueia, pois o buffer está cheio

fmt.Println(<-ch) // lê 1, buffer: [2]
ch <- 3 // agora a escrita será bem-sucedida

Portanto, o mecanismo de escrita em um canal com capacidade limitada garante controle sobre os fluxos de dados e evita o estouro do buffer.