Programmation en Go/If et switch

Alternatives: if/else

modifier

La forme if/else permet de tester une condition, d'exécuter un bloc d'instructions si cette condition est vraie (le booléen 'true'), et un autre bloc si la condition est fausse.

if condition {
  condition vraie
} else {
  condition fausse
}

Par exemple, pour calculer une valeur absolue:

func Abs (x int) int {
  if x < 0 {
    return -x
  }
  return x
}
switch {
case condition: instructions
case condition: instructions
default: instructions
}

On peut ainsi réaliser plusieurs alternatives. On peut également réaliser un "switch" sur une valeur donnée:

signe:="Bélier"
switch signe {
case "Bélier","Gémeaux": return "Vous allez être riche"
case "Taureau","Sagittaire": return "Vous allez épouser une belle personne"
default: return "Je ne sais pas trop"
}

Détecter un type

modifier

Une variable de type interface {} peut contenir une valeur de type quelconque. Il est possible de tester que le type de cette valeur est T en exécutant:

v, ok = valeur.(T)

Il est aussi possible de le faire avec switch:

var valeur interface {}
switch t := valeur.(type) {
default:
   fmt.Printf("type inattendu %T", t)
case bool:
   fmt.Printf("booléen %T\n", t)
case int:
   fmt.Printf("entier %T\n", t)
case *bool:
   fmt.Printf("pointeur vers booléen %T\n", *t)
case *int:
   fmt.Printf("pointeur vers entier %T\n", *t)
}

Alternative avec initialisation

modifier
if initialisation; condition {
switch initialisation; condition {

Exemple:

if err := file.Chmod("0664"); err {
  //erreur dans chmod
}