Les fonctions
13 min · Débutant · 3 octobre 2026
Déclarer une fonction
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
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
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
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
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)