cybercursus

Les fonctions

13 min · Débutant · 3 octobre 2026

Sommaire
  1. Déclarer une fonction
  2. Les retours multiples
  3. Les fonctions variadiques
  4. Les fonctions comme valeurs
  5. À toi de jouer

Déclarer une fonction

go
func carre(x int) int {
  return x * x
}

fmt.Println(carre(5)) // 25

func nom(parametre type) typeDeRetour déclare une fonction. Le type de retour s’écrit après la liste de paramètres, pas avant le nom comme en Java.

Les retours multiples

go
func diviser(a, b float64) (float64, error) {
  if b == 0 {
      return 0, fmt.Errorf("division par zero impossible")
  }
  return a / b, nil
}

resultat, err := diviser(10, 2)
if err != nil {
  fmt.Println("Erreur :", err)
} else {
  fmt.Println("Resultat :", resultat)
}

nil représente l’absence d’erreur. Cette convention (vérifier systématiquement err != nil) remplace les exceptions des autres langages, un point développé au chapitre sur la gestion des erreurs.

Info

a, b float64 dans la signature est un raccourci pour a float64, b float64 : deux paramètres consécutifs du même type peuvent partager une seule annotation de type.

Les fonctions variadiques

go
func somme(nombres ...int) int {
  total := 0
  for _, n := range nombres {
      total += n
  }
  return total
}

fmt.Println(somme(1, 2, 3))       // 6
fmt.Println(somme(1, 2, 3, 4, 5)) // 15
fmt.Println(somme())              // 0, aucun argument

...int accepte un nombre quelconque d’arguments int, regroupés automatiquement en []int à l’intérieur de la fonction.

Les fonctions comme valeurs

go
doubler := func(x int) int {
  return x * 2
}

fmt.Println(doubler(5)) // 10

Une fonction peut être assignée à une variable et appelée comme n’importe quelle autre valeur, une fonctionnalité utile pour passer un comportement en paramètre d’une autre fonction.

À toi de jouer

go
func diviserEnSecurite(a, b int) (int, bool) {
  if b == 0 {
      return 0, false
  }
  return a / b, true
}

resultat, ok := diviserEnSecurite(10, 0)
fmt.Println(resultat, ok)
Que produit ce code à l'exécution ?
Pourquoi de nombreuses fonctions de la bibliothèque standard Go, comme la division ou l'accès à une map, renvoient-elles deux valeurs plutôt qu'une seule ?
Qu'est-ce qu'une fonction variadique, comme `func somme(nombres ...int) int`, permet de faire ?

Pour aller plus loin

Commentaires

Recherche