Hostinger

Apprendre la gestion des erreurs en Go (Golang)

Pas d'exceptions dans le langage Go

Go n’a pas de système d’exceptions comme Java ou Python. À la place, Go préfère un modèle simple : les fonctions qui peuvent échouer retournent une valeur d’erreur (du type error) comme dernier paramètre. On la valeur est vérifié pour savoir si la fonction a réussi ou non.

Vous devez explicitement traiter chaque erreur, rendant le code plus lisible et moins magique. La gestion des erreurs devient plus facile. 😉

Gestion de erreurs

Exemple

On va créer une erreur ErrNotFound. C’est un objet qui a une méthode Error() renvoyant une string "élément introuvable".

Par convention, les erreurs doivent être écrites avec des lettres minuscules.

package main

import (
    "errors"
    "fmt"
)

var ErrNotFound = errors.New("élément introuvable")

func main() {
    fmt.Println(ErrNotFound.Error()) // "élément introuvable"
}

Retour des erreurs et if err != nil

Exemple de fonction qui retourne une erreur

package main

import (
	"errors"
)

func codeSecret(code string) (string, error) {
	if code == "1234" {
		return "code secret correct", nil
	}
	return "", errors.New("code secret incorrect")
}

Dans cette fonction, il faut entrer un code secret. Elle retourne deux valeurs : le résultat et une error. Si tout se passe bien, elle renvoie nil, sinon, une erreur si le code secret est incorrect.

Nous avons appris dans la section valeur(s) de retour de ce cours qu’une fonction en Go peut renvoyer deux résultats.

Vérification de l'erreur

Nous allons utiliser if err != nil. S’il y a une erreur, on la gère (par exemple en l’affichant), sinon on utilise la valeur retournée.

package main

import (
	"errors"
	"fmt"
)

func codeSecret(code string) (string, error) {

	if code == "1234" {
		return "code secret correct", nil
	}

	return "", errors.New("code secret incorrect")

}

func main() {

	res, err := codeSecret("1456")
	if err != nil {
		fmt.Println("Erreur :", err)
	} else {
		fmt.Println("Résultat :", res)
	}

}

Si j'exécute le code, le résultat sera une erreur :

Erreur : code secret incorrect

Si je change et que j'insère le bon code secret res, err := codeSecret("1234") , le programme affichera :

Résultat : code secret correct