Aller au contenu

Gestion des erreurs et conventions#

L'interface "error"#

  • L'interface error est un type intégré à Go qui définit une méthode Error() 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 un panic.
  • 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 et recover :
    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 et fmt.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) ou panic(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()