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