Maison  >  Article  >  développement back-end  >  Quelles sont les méthodes de gestion des exceptions en langage Go ?

Quelles sont les méthodes de gestion des exceptions en langage Go ?

WBOY
WBOYoriginal
2023-06-09 20:10:521843parcourir

#🎜🎜Le langage #Go n'a pas pris en charge le mécanisme de gestion des exceptions au sens traditionnel, mais dans le langage Go, certaines méthodes de gestion des erreurs peuvent être utilisées pour gérer différents types d'erreurs. Dans cet article, nous présenterons les méthodes de gestion des exceptions en langage Go.

    Error return value
En langage Go, si la valeur renvoyée par une fonction est une valeur de type erreur, cela signifie que la fonction peut se produire Une sorte d'erreur. Lorsque cette fonction est appelée, la valeur d'erreur renvoyée est vérifiée pour déterminer comment le programme doit poursuivre son exécution. Cette méthode est relativement directe et simple et constitue la principale méthode de gestion des erreurs dans le langage Go.

Par exemple :

func Divide(a, b int) (int, error) {
    if b == 0 {
        return 0, fmt.Errorf("can't divide by zero")
    }
    return a / b, nil
}

On voit que si le diviseur est 0, la fonction retournera une valeur d'erreur. Lorsque cette fonction est appelée, la valeur de retour est vérifiée pour voir si une erreur s'est produite. Si la valeur de l'erreur n'est pas nulle, le programme exécute le code de gestion des erreurs correspondant.

result, err := Divide(5, 0)
if err != nil {
    log.Fatal(err)
}

    defer/panic/recover
Bien que le langage Go ne dispose pas de mécanisme de gestion des exceptions au sens traditionnel, il permet l'utilisation de différer, panique Combiné avec la fonction de récupération pour gérer les erreurs. Cette combinaison est appelée mécanisme « différer-panique-récupérer ».

    defer : Cette fonction appelle une instruction qui doit être exécutée avant la fin de l'exécution de la fonction en cours. Il peut s'agir de n'importe quelle instruction. Elles sont généralement utilisées pour libérer des ressources ou gérer l'ordre des ressources. .
  • panique : Cette fonction peut arrêter immédiatement l'exécution du programme en cours. Et commence à transmettre une valeur d'erreur à la fonction de récupération au niveau le plus élevé de la pile d'appels du programme. Lorsque la valeur d'erreur n'est pas gérée, le programme se termine.
  • recover : Cette fonction est utilisée pour capturer la valeur d'erreur transmise au bas de la fonction panic (), puis renvoyer l'erreur et arrêter le processus de panique mettant fin au programme plus tôt.
Par exemple :

func Foo() {
    defer func() {
        if r := recover(); r != nil {
            log.Println("Recovered:", r)
        }
    }()
    panic("I'm panic!")
    fmt.Println("Continuing execution...")
}

Comme vous pouvez le constater, l'appel de la fonction panique est un moyen de terminer l'exécution du programme. S'il existe plusieurs fonctions de report, elles seront exécutées dans l'ordre FILO, la fonction de récupération doit donc être placée dans la fonction de report la plus externe.

    Type d'erreur personnalisé
Le langage Go fournit également un moyen de personnaliser les types d'erreur. Lorsqu’une gestion plus fine d’erreurs spécifiques est requise, un type d’erreur peut être personnalisé.

Par exemple :

type DivideError struct {
    dividend int
    divisor  int
}

func (de DivideError) Error() string {
    return fmt.Sprintf("can't divide %d by %d", de.dividend, de.divisor)
}

func Divide(a, b int) (int, error) {
    if b == 0 {
        return 0, DivideError{a, b}
    }
    return a / b, nil
}

Dans cet exemple, nous définissons un nouveau type d'erreur DivideError . Ce type contient le diviseur et le dividende. Ce type implémente également une méthode Error pour renvoyer un message d'erreur. Dans notre fonction Divide, si le diviseur est 0, un type DivideError initialisé est renvoyé.

result, err := Divide(5, 0)
if de, ok := err.(DivideError); ok {
    log.Fatalf("Error handled by application: %s
", de.Error())
} else if err != nil {
    log.Fatal(err)
}

Il convient de noter que lorsque vous utilisez un type personnalisé comme erreur, vous devez utiliser des assertions de type pour la conversion de type afin de gérer des types d'erreurs spécifiques.

Dans cet article, nous présentons les méthodes de gestion des exceptions dans le langage Go, qui sont les valeurs de retour d'erreur, le mécanisme de différé-panique-récupération et les types d'erreurs personnalisés. Bien entendu, dans le développement réel, la méthode de gestion des exceptions la plus appropriée doit être sélectionnée en fonction de la situation spécifique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn