GoGoPrimer
< Retour au module

Structures de contrôle

switch

Le `switch` de Go ressemble à celui d'autres langages, avec une différence majeure : chaque `case` s'arrête automatiquement après son exécution. Pas besoin de `break`, et pas de risque d'enchaîner accidentellement sur le cas suivant.

day := "mercredi"
 
switch day {
case "samedi", "dimanche":
fmt.Println("Week-end")
default:
fmt.Println("Jour de semaine")
}
// affiche "Jour de semaine"

Un `case` peut regrouper plusieurs valeurs séparées par des virgules, comme ci-dessus pour "samedi" et "dimanche". Si tu as vraiment besoin de l'ancien comportement de `fallthrough` (continuer sur le cas suivant), le mot-clé `fallthrough` existe, mais il est rarement utilisé.

`switch` sans expression après le mot-clé se comporte comme un `if/else if` plus lisible : chaque `case` contient sa propre condition booléenne.

score := 82
 
switch {
case score >= 90:
fmt.Println("A")
case score >= 75:
fmt.Println("B")
case score >= 60:
fmt.Println("C")
default:
fmt.Println("D")
}
// affiche "B"

Il existe aussi le "type switch" (`switch v := x.(type)`), qui teste le type dynamique d'une interface. Il sera présenté dans le module sur les interfaces, une fois que la notion aura du sens.

À toi de jouer

Écris une fonction `season(month int) string` (mois de 1 à 12) qui renvoie "hiver", "printemps", "été" ou "automne" avec un `switch` sans expression.

func season(month int) string {
// à compléter
}