Gestion des erreurs et conventions#
L'interface "error"#
- L'interface
error
est un type intégré à Go qui définit une méthodeError() string
. Tout objet qui implémente cette méthode est considéré comme une erreur. - Les erreurs peuvent être renvoyées comme une valeur de retour dans les fonctions et les méthodes.
- Exemple de création d'une erreur simple :
err := errors.New("une erreur est survenue")
Création et propagation d'erreurs personnalisées#
- Les erreurs personnalisées peuvent être créées en définissant un nouveau type qui implémente l'interface
error
. - Pour propager une erreur, renvoyez-la de la fonction actuelle à la fonction appelante.
- Exemple de création et de propagation d'une erreur personnalisée :
type myError struct { msg string } func (e *myError) Error() string { return e.msg } func foo() error { return &myError{"une erreur est survenue"} }
Utilisation de panic et recover#
panic
est une fonction intégrée qui arrête l'exécution normale du programme.panic
prend un seul argument de n'importe quel type.recover
est une autre fonction intégrée qui regagne le contrôle après unpanic
.- Les paniques sont généralement utilisées pour les erreurs irrécupérables, tandis que les erreurs classiques sont utilisées pour les erreurs récupérables.
- Exemple d'utilisation de
panic
etrecover
:func main() { defer func() { if r := recover(); r != nil { fmt.Println("Recovered from", r) } }() panic("something bad happened") }
Utilisation du package "errors" et "fmt.Errorf"#
- Le package
errors
fournit des fonctions pour manipuler les erreurs. fmt.Errorf
permet de formatter une chaîne de caractères et de créer une erreur simultanément.- Exemple d'utilisation de
errors.New
etfmt.Errorf
:err1 := errors.New("une erreur est survenue") err2 := fmt.Errorf("une erreur est survenue: %v", err1)
Techniques de gestion d'erreurs courantes#
- Vérifiez toujours les erreurs en utilisant une déclaration
if err != nil
. Ne présumez jamais qu'une opération réussira. - En cas d'erreur, il est courant de la renvoyer à la fonction appelante.
- Si l'erreur ne peut pas être gérée,
log.Fatal(err)
oupanic(err)
peuvent être utilisés pour arrêter le programme. - Exemple de gestion d'erreur :
file, err := os.Open("file.txt") if err != nil { log.Fatal(err) } defer file.Close()