Junior — Middle
De que maneiras é possível gerir ou interagir com um canal fechado na linguagem Go?
sobes.tech IA
Resposta da IA
Em Go, um canal fechado (canal sem buffer) é um canal sem buffer que sincroniza o remetente e o destinatário. Pode-se gerir ou interagir com tal canal das seguintes formas:
- Envio e receção: O remetente bloqueia até que o destinatário leia o valor, e vice-versa.
- Fechar o canal: Pode-se fechar um canal usando a função
close(channel). Após fechar, não é possível enviar valores, mas pode-se ler os valores restantes e obter valores nulos. - Verificação de fecho: Ao ler de um canal, pode-se verificar se está fechado usando o segundo valor:
v, ok := <-ch
if !ok {
// canal fechado
}
- Uso de select: Para interações não bloqueantes ou tempos limite, pode-se usar a construção
selectcom canais.
Exemplo:
ch := make(chan int) // canal fechado
// Envio
go func() {
ch <- 42
}()
// Receção
val := <-ch
// Fechar
close(ch)
// Verificação
v, ok := <-ch
if !ok {
fmt.Println("Canal fechado")
}