Exercice : goroutines et channels
Voici un exercice simple pour débutants qui vous permettra de bien comprendre comment fonctionnent les channels et les goroutines en Go.
L’exercice consiste à créer une goroutine qui calcule le carré de chaque nombre d’une liste et envoie le résultat sur un channel. La fonction principale (main) recevra ces résultats et les affichera.
Objectif
-
Créer une goroutine qui parcourt une liste de nombres.
-
Calculer le carré de chaque nombre.
-
Envoyer chaque résultat sur un channel.
-
Dans la fonction main, recevoir et afficher les valeurs envoyées sur le channel.
Étapes à suivre
-
Déclarer une slice de nombres entiers (par exemple, [1, 2, 3, 4, 5]).
-
Créer un channel de type int qui servira à transmettre les résultats.
-
Lancer une goroutine qui va :
- Parcourir la slice.
- Calculer le carré de chaque nombre.
- Envoyer chaque résultat sur le channel.
- Une fois terminé, fermer le channel pour signaler qu’il n’y a plus de valeurs à envoyer.
-
Dans la fonction main, utiliser une boucle for range pour lire les valeurs du channel et les afficher.
Exemple de code (correction de l'exercice)
package main
import "fmt"
// Fonction qui calcule le carré de chaque nombre d'une slice et envoie le résultat sur un channel.
func calculerCarres(nombres []int, resultats chan int) {
for _, nombre := range nombres {
carre := nombre * nombre
resultats <- carre // Envoi du carré sur le channel
}
close(resultats) // Fermeture du channel après l'envoi de toutes les valeurs
}
func main() {
// Définir une slice de nombres
nombres := []int{1, 2, 3, 4, 5}
// Créer un channel pour transmettre les résultats (type int)
resultats := make(chan int)
// Lancer la goroutine pour calculer les carrés
go calculerCarres(nombres, resultats)
// Recevoir et afficher les résultats depuis le channel
for resultat := range resultats {
fmt.Println("Carré calculé :", resultat)
}
}