Sobes.tech
Junior — Middle

Quelles sont les conséquences si le canal n'est pas fermé après utilisation?

sobes.tech IA

Réponse de l'IA

Si vous ne fermez pas le canal en Go après son utilisation, les conséquences suivantes peuvent survenir:

  • Blocages de goroutines: Si d'autres goroutines attendent des données du canal et qu'il n'est pas fermé, elles peuvent attendre indéfiniment, car elles ne recevront pas de signal de fin.
  • Fuites de ressources: Bien que le canal lui-même ne nécessite pas de libération explicite de mémoire, un canal non fermé peut entraîner des erreurs logiques et des blocages dans le programme.
  • Impossibilité de gérer correctement la fin de la transmission: Un canal fermé permet d'utiliser des constructions comme for range ou la vérification ok pour déterminer que les données sont terminées. Sans fermeture, cela n'est pas possible.

Exemple de fermeture correcte du canal:

ch := make(chan int)
go func() {
    defer close(ch)
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

for v := range ch {
    fmt.Println(v)
}

Ici, le canal est fermé après l'envoi de toutes les valeurs, ce qui permet à la boucle range de se terminer correctement.