Sobes.tech
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 select com 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")
}