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.