Programmation en Go/Fonctions

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche

Nombre variable de paramètres[modifier | modifier le wikicode]

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ée[modifier | modifier le wikicode]

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 multiples[modifier | modifier le wikicode]

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)

Defer[modifier | modifier le wikicode]

 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 anonymes[modifier | modifier le wikicode]

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 }