Sobes.tech
Senior

Qual dos seguintes trechos de código contém um erro ou potencial problema relacionado com o trabalho com canais? Opção 1 package main func main() { ch := make(chan int) ch <- 1 } Opção 2 package main func main() { ch := make(chan int, 1) ch <- 1 } Opção 3 package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } Opção 4 package main func main() { ch := make(chan int) close(ch) <-ch } Opção 5 package main func main() { ch := make(chan int, 3) ch <- 4 }

sobes.tech IA

Resposta da IA

O erro está na Opção 1:

package main
func main() {
    ch := make(chan int)
    ch <- 1
}

Aqui, um canal sem buffer ch := make(chan int) é criado. Enviar para esse canal ch <- 1 bloqueia até que alguém leia do canal. Neste código, não há receptor, portanto o programa ficará bloqueado para sempre (deadlock).

A opção 2 está correta, pois o canal é com buffer de tamanho 1, e o envio não bloqueia se o buffer não estiver cheio.

A opção 3 também está correta: envio e recebimento estão equilibrados.

A opção 4 está correta: é possível ler de um canal fechado, a leitura retornará o valor zero e não bloqueará.

A opção 5 está correta: buffer de 3, um valor é enviado, o buffer não está cheio.

Resumindo, o problema está apenas na Opção 1 — bloqueio ao enviar para um canal sem buffer e sem receptor.