Maison > développement back-end > Golang > Golang ne se ferme pas en raison d'une exception

Golang ne se ferme pas en raison d'une exception

PHPz
Libérer: 2023-05-10 11:14:36
original
834 Les gens l'ont consulté

Avec la popularité de Golang, de plus en plus de développeurs commencent à utiliser Golang pour développer des applications. Bien que Golang ait une syntaxe concise et facile à lire similaire au langage C, il est plus exigeant en matière de gestion des exceptions que les autres langages. Cet article explique comment implémenter une exception de non-sortie dans Golang.

Dans Golang, si vous utilisez les mécanismes standard de panique et de récupération pour gérer les exceptions, le programme se fermera directement. Voici un exemple simple :

func test() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered:", r)
        }
    }()
    fmt.Println("Start test")
    panic("Something wrong")
}

func main() {
    test()
    fmt.Println("End main")
}
Copier après la connexion

Dans le code ci-dessus, lorsque la fonction de test exécute l'instruction de panique, le programme se terminera directement sans afficher "End main". Par conséquent, nous devons trouver d’autres méthodes de gestion des exceptions pour empêcher le programme de se fermer lorsqu’une exception se produit.

Un moyen simple consiste à utiliser l'instruction defer et la fonction de récupération pour gérer les exceptions. Nous pouvons utiliser le bloc de code suivant pour intercepter les exceptions :

func test() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered:", r)
        }
    }()
    fmt.Println("Start test")
    panic("Something wrong")
}

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered:", r)
        }
    }()
    test()
    fmt.Println("End main")
}
Copier après la connexion

Dans ce cas, lorsque la fonction de test exécute l'instruction de panique, la fonction de récupération sera déclenchée et le programme continuera à s'exécuter au lieu de quitter . Enfin, la fonction principale affichera "End main".

Une autre façon de gérer les exceptions consiste à utiliser le mécanisme de gestion des erreurs de Golang. Toutes les fonctions de Golang peuvent renvoyer un objet d'erreur. Par conséquent, lorsqu'une exception se produit à l'intérieur d'une fonction, nous pouvons renvoyer directement l'objet d'erreur au lieu d'utiliser l'instruction panique pour terminer l'exécution du programme.

Ce qui suit est un exemple d'utilisation du mécanisme de gestion des erreurs pour gérer les exceptions :

func test() error {
    fmt.Println("Start test")
    return errors.New("Something wrong")
}

func main() {
    if err := test(); err != nil {
        fmt.Println(err)
    }
    fmt.Println("End main")
}
Copier après la connexion

Dans cet exemple, la fonction test renvoie un objet d'erreur créé par la fonction New. Dans la fonction principale, nous déterminons si une exception se produit en vérifiant si la valeur de retour de la fonction de test est nulle. Si une exception se produit, le programme génère un message d'erreur et poursuit l'exécution. Enfin, la fonction principale affiche "End main".

En résumé, la gestion des exceptions de Golang peut être implémentée via la fonction de récupération et le mécanisme de gestion des erreurs. Nous pouvons choisir la méthode de gestion des exceptions appropriée en fonction des besoins spécifiques de l'entreprise.

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!

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