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
PHPzoriginal
2023-05-10 11:14:36836parcourir

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")
}

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")
}

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")
}

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!

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