tech:go_lang_-_goroutines
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| tech:go_lang_-_goroutines [2026/05/06 23:15] – Jean-Baptiste | tech:go_lang_-_goroutines [2026/05/16 15:45] (Version actuelle) – Jean-Baptiste | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | < | ||
| + | {{tag> | ||
| + | |||
| + | # Go lang - goroutines | ||
| + | |||
| + | Voir : | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | ## Pb sortie de main avant terminaisons des goroutines - Attendre la fin de toutes les goroutines avant de terminer le programme (la fonction main) | ||
| + | |||
| + | Voir : | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | |||
| + | |||
| + | Solution naïve | ||
| + | |||
| + | ~~~go | ||
| + | import ( | ||
| + | " | ||
| + | " | ||
| + | ) | ||
| + | |||
| + | func wait_all_goroutines() { | ||
| + | for runtime.NumGoroutine() > 1 { | ||
| + | time.Sleep(500 * time.Millisecond) | ||
| + | } | ||
| + | } | ||
| + | |||
| + | func main() { | ||
| + | defer fmt.Println(" | ||
| + | |||
| + | // Last defer | ||
| + | defer wait_all_goroutines() | ||
| + | |||
| + | ch := make(chan int) | ||
| + | go evenSum(1, 100, ch) | ||
| + | } | ||
| + | ~~~ | ||
| + | |||
| + | ## Afficher les résultats des goroutine de la plus rapide à la plus longue | ||
| + | |||
| + | Voir : | ||
| + | * https:// | ||
| + | |||
| + | ~~~go | ||
| + | ch1 := make(chan int) | ||
| + | ch2 := make(chan int) | ||
| + | go evenSum(1, 10, ch1) | ||
| + | go squareSum(1, | ||
| + | for range 2 { | ||
| + | select { | ||
| + | case r1 := <-ch1: | ||
| + | fmt.Println(r1) | ||
| + | case r2 := <-ch2: | ||
| + | fmt.Println(r2) | ||
| + | } | ||
| + | } | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | |||
| + | FIXME | ||
| + | |||
