Hostinger

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

  1. Déclarer une slice de nombres entiers (par exemple, [1, 2, 3, 4, 5]).

  2. Créer un channel de type int qui servira à transmettre les résultats.

  3. 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.
  4. 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)
    }
}