Maison > développement back-end > Golang > 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
Libérer: 2023-06-09 20:10:52
original
1941 Les gens l'ont consulté

#🎜🎜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
}
Copier après la connexion

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)
}
Copier après la connexion

    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...")
}
Copier après la connexion

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
}
Copier après la connexion

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)
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal