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.