Programmation en Go/Fonctions

Nombre variable de paramètresModifier

Le dernier paramètre d'une fonction peut être suivi de ...type qui définit un nombre variable de paramètres.

 func Min(a ...int) int {
   if len(a)==0 {
     return 0
   }
   min := a[0]
   for _, v := range a {
     if v < min {
       min = v
     }
   }
   return min
 }

Ensuite, on peut appeler cette fonction de la manière suivante:

 x := Min(1, 3, 2, 0) // zéro

On peut également passer un tableau à la place des arguments avec la syntaxe t...:

 tab := []int{1,3,2,0}
 x := Min(tab...)

Valeur de retour nomméeModifier

On peut omettre le nom de la variable de retour grâce à ce nom:

 func Somme(a []int) (somme int) {
   for _,v := range a {
     somme += v
   }
   return
 }

Valeurs de retour multiplesModifier

On peut retourner deux valeurs ou plus avec la syntaxe suivante:

 func SommeEtMoyenne (a []float) (float,float) {
   somme := 0.0
   for _, x := range a {
     somme += x
   }
   return somme,somme/len(a)
 }
 somme, moyenne := SommeEtMoyenne(a)

DeferModifier

 defer fonction(....)

Entraîne l'exécution différée d'une commande à la sortie de la fonction courante. Par exemple, juste après avoir ouvert un fichier, on peut différer sa fermeture par:

 defer fichier.Close()

ce qui fait que le fichier sera fermé quoi qu'il arrive avant de quitter la fonction. Les commandes enregistrées par 'defer' sont exécutées dans l'ordre inverse de leur déclaration: la dernière déclarée sera la première exécutée.

Fonctions anonymesModifier

Les fonctions anonymes sont un des types de base de Go. On peut donc stocker une fonction dans un tableau et dans n'importe quelle variable dont le type est défini comme étant:

 func (arguments, ...) retour

On déclare une fonction littérale par la syntaxe suivante :

 func (arguments, ...) retour { corps de la fonction }