Maison  >  Article  >  développement back-end  >  utilisation de Golang Panic

utilisation de Golang Panic

WBOY
WBOYoriginal
2023-05-27 17:05:40917parcourir

Golang est un langage de développement efficace, simultané et concis avec une bonne lisibilité et maintenabilité. Cependant, parfois même dans un tel langage, des erreurs inattendues se produisent dans le code, telles que : tableau hors limites, pointeur nul, ou même crash du système, etc. Afin de faire face à ces problèmes, Go propose une méthode de traitement simple : la panique.

1. Qu'est-ce que la panique ?
Panic est une fonction intégrée utilisée pour indiquer qu'une erreur irrécupérable s'est produite dans le programme. Lorsque la fonction de panique est appelée, le programme arrête le flux actuel et génère une erreur, puis arrête de s'exécuter et met fin à la pile d'appels.

2. Comment utiliser la panique ?
Panic est facile à utiliser. Lancez simplement l'erreur directement via la fonction panic(). Par exemple : panic() 函数直接抛出错误即可。例如:

func app() {
    if err := someFunction(); err != nil{
        log.Printf("operation failed, error - %s", err.Error())
        panic(err)
    }
    // 其他代码
}

如果 someFunction() 发生了错误,那么应用程序将会停止运行并抛出 panic err

func recoverDemo() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("recover from panic", r)
        }
    }()

    panic("something wrong")
    fmt.Println("After panic")
}

Si une erreur se produit dans someFunction(), l'application cessera de s'exécuter et générera un message d'erreur panic err.

Dans l'exemple de code ci-dessus, lorsqu'une erreur se produit dans la fonction, nous imprimons les détails de l'erreur et les transmettons à la fonction panique. Cela entraînera l'arrêt forcé du programme et l'impression d'un message d'erreur sur la console. Dans ce cas, des informations d'erreur spécifiques seront imprimées et l'application cessera de s'exécuter et ne continuera pas à exécuter le code suivant. À ce stade, un mécanisme de détection d’erreurs doit être introduit dans le code pour garantir l’exactitude de l’application.

3. La relation entre panic et Recover

Si panic est utilisé dans le code, tout le code de la pile d'appels cessera de s'exécuter, le programme s'arrêtera et un message d'erreur sera généré, ce qui aura un grand impact sur le programme. Par conséquent, dans le langage Go, l’utilisation conjointe de panic et recovery peut rendre le programme plus robuste.

La fonction panique arrêtera uniquement l'exécution du programme dans la fonction qui l'appelle directement. Ensuite, sur la pile d'appels de la fonction, lorsque l'exception atteint le sommet de la pile d'appels, elle mettra fin à l'exécution du programme.

recover a la capacité de restaurer le fonctionnement du système, il ne peut être appelé que dans la fonction de retard. La fonction de récupération est d'intercepter les exceptions de panique et de restaurer le fonctionnement du système.

S'il n'y a pas de panique avant d'appeler la fonction recovery, alors recovery ne fera rien.

Regardons l'exemple suivant :

rrreee

Dans cet exemple, la fonction après le mot-clé defer sera exécutée avant la fin de la fonction. Si une panique se produit pendant l'exécution de la fonction, la méthode de récupération sera activée après avoir atteint l'expression différée. Il captera la panique et imprimera le message que nous lui transmettrons.

À Golang, récupérer est généralement utilisé pour se remettre de la panique. Habituellement, pendant le processus de développement, nous espérons que le programme ne s'arrêtera pas dans certaines circonstances, même si une exception se produit dans la fonction, ce qui nous oblige à utiliser la fonction de récupération pour récupérer.

4. Meilleures pratiques

Afin d'éviter les plantages de programme causés par un appel de panique, nous devons faire de notre mieux pour détecter ces exceptions et utiliser recovery pour récupérer le cas échéant. Dans ma pratique, je suis généralement les principes suivants lorsque j'utilise des paniques :


1. Restez simple

la panique ne doit pas être abusée dans le code et ne doit être utilisée que lorsqu'une erreur vraiment irrécupérable se produit. Dans d'autres cas, des mécanismes de gestion des erreurs doivent être utilisés.


2. Utilisez correctement la fonction defer

Nous utilisons généralement la fonction defer pour gérer le nettoyage de l'utilisation des ressources. Cependant, lors de l'utilisation de panic et recovery, l'emplacement du report de l'exécution est très important. Appelez recovery dans la fonction defer pour capturer et gérer les exceptions de panique.


3. Utiliser l'erreur standard

Le mécanisme d'erreur standard de Golang est très utile. Si une erreur se produit, nous devons utiliser une variable de type erreur pour transmettre les informations d'erreur et déterminer si une erreur se produit en déterminant si la variable est nulle. 🎜

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
Article précédent:Le golang est-il mature ?Article suivant:Le golang est-il mature ?