Junior — Middle
O que acontecerá no sistema se não definir o comprimento do canal durante a sua criação?
sobes.tech IA
Resposta da IA
Se ao criar um canal em Go não for especificada a sua extensão, é criado um canal não bufferizado (unbuffered). Este tipo de canal tem as seguintes características:
- O envio (
chan <-) bloqueia até que outra goroutine leia o valor do canal. - A receção (
<- chan) bloqueia até que um valor seja enviado ao canal.
Isto significa que as operações de envio e receção sincronizam-se diretamente entre goroutines, garantindo uma sincronização rigorosa.
Exemplo de criação de um canal não bufferizado:
ch := make(chan int) // extensão não especificada, canal não bufferizado
// Envio e receção irão bloquear até à sincronização
Se for necessária uma transmissão assíncrona sem bloqueio, deve-se especificar a extensão do buffer, por exemplo:
ch := make(chan int, 10) // buffer de 10 elementos
Em suma, a ausência de extensão na criação do canal significa que o canal funcionará em modo síncrono.