• [^] # Re: Hello World concurrentiel

    Posté par . En réponse à la dépêche De tout, de rien, des bookmarks, du bla‐bla #45. Évalué à 3.

    On peut éliminer la nécessiter de tester la réponse en fermant le channel. Cela donne :

    package main
    func main() {
     sayHello := make(chan interface{})
     sayWorld := make(chan interface{})
     quitter := make(chan string)
     go func() {
     for i := 0; i < 4; i++ {
     print("Hello ")
     sayWorld <- nil
     <-sayHello
     }
     close(sayWorld)
     }()
     go func() {
     for _ = range sayWorld { // We can range over chans.
     println("World!")
     sayHello <- nil
     }
     quitter <- "Done"
     }()
     println(<-quitter)
    }
    
    

    http://play.golang.org/p/sBtjttvPRJ

    Je ne vois pas comment simplifier encore en éliminant le channel quitter. Il n'y a pas à ma connaissance de primitive pour attendre la fermeture d'un channel. On pourrait utiliser les WaitGroups mais c'est un peu plus lourd conceptuellement que le channel quitter, cf http://play.golang.org/p/Iv5TC6Bgrk .