exo-go

Exercice 1 : Manipulation de chaînes et slices

Objectif : tester la compréhension des slices et de range.

Écris une fonction ReverseWords(s string) string qui inverse chaque mot d’une chaîne tout en conservant l’ordre des mots.
Exemple : "hello world""olleh dlrow"

Points d’attention :

  • Utiliser strings.Fields pour séparer les mots
  • Manipuler les slices de runes pour gérer correctement les caractères UTF-8

Exercice 2 : Interfaces et polymorphisme

Objectif : tester la maîtrise des interfaces et méthodes.

On a l’interface suivante :
type Shape interface {
    Area() float64
    Perimeter() float64
}

Points d’attention :

  • Compréhension des méthodes et des interfaces
  • Gestion des types float64 et des calculs

Exercice 3 : Concurrence avec goroutines

Objectif : tester la compréhension de la concurrence, canaux et select.

Écris une fonction qui prend une slice de nombres et calcule en parallèle :La somme des nombres pairsLa somme des nombres impairs

Retourne les deux résultats.

Indications :

  • Lancer deux goroutines pour calculer séparément
  • Utiliser un channel pour récupérer les résultats

Exercice 4 : Gestion d’erreurs

Objectif : tester la gestion idiomatique des erreurs en Go.

Implémente une fonction ReadFileLines(path string) ([]string, error) qui lit un fichier et retourne toutes les lignes.
Si le fichier n’existe pas, retourne une erreur appropriée.

Points d’attention :

  • Utiliser os.Open et bufio.Scanner
  • Retourner l’erreur à l’appelant, ne pas log.Fatal

Exercice 5 : Structures imbriquées et JSON

Objectif : tester la manipulation de structs et JSON.

Définis une structure User :
type User struct {
    Name string
    Age  int
    Emails []string
}
  1. Convertir un User en JSON
  2. Lire un JSON et récupérer un User

Points d’attention :

  • Utiliser encoding/json
  • Gérer les erreurs de décodage

Exercice 6 : Canal de pipeline (niveau avancé)

Objectif : tester les pipelines Go et select.

Crée un pipeline de traitement :
  • Étape 1 : Générer les nombres de 1 à 100 dans un channel
  • Étape 2 : Filtrer les multiples de 3
  • Étape 3 : Multiplier les nombres filtrés par 2
  • Étape 4 : Récupérer et afficher les résultats

Points d’attention :

  • Utiliser plusieurs goroutines connectées par des channels
  • Fermer les channels correctement pour éviter un deadlock