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

utilisation de Golang Panic

May 22, 2023 pm 07:26 PM

Golang est un langage de programmation efficace, sûr et évolutif, populaire pour sa puissante gestion de la mémoire, ses fonctionnalités de concurrence et sa syntaxe concise. Dans Golang, la panique est un mécanisme de gestion des exceptions permettant de gérer les erreurs irrécupérables et les situations inattendues, similaire aux mécanismes de gestion des exceptions ou des erreurs dans d'autres langages de programmation.

Qu'est-ce que la panique ?

Lorsqu'une erreur ou une exception non gérée se produit pendant l'exécution du programme, le programme génère une erreur de panique. La panique est le mécanisme utilisé par le langage Golang pour gérer les erreurs irrécupérables et constitue également un mécanisme de gestion des exceptions. La panique est généralement causée par des problèmes inattendus lors de l'exécution du programme, empêchant le programme de fonctionner normalement. Il déclenche certaines opérations de nettoyage avant que le programme ne plante, puis arrête son exécution.

Syntaxe de panique

En Golang, la syntaxe de panique est très simple, il suffit d'appeler la fonction panic(). Voici la syntaxe :

panic("Une erreur s'est produite")

Lors de l'appel de la fonction panic(), vous pouvez fournir un message d'erreur pour faciliter le débogage de votre code. Si aucun message d'erreur n'est fourni, la fonction panic() générera un message d'erreur par défaut.

Le code suivant montre comment utiliser panic :

package main

import "fmt"

func main() {

fmt.Println("Go Panic Example")
panic("Something went wrong")
fmt.Println("Program Restarts from Here")
Copier après la connexion

}

Sortie :

Go Panic Exemple
panic : Quelque chose s'est mal passé

goroutine 1 [en cours d'exécution] :
main.main()

    /Users/akhil/Documents/Go/src/main.go:7 +0x39
Copier après la connexion

état de sortie 2

Dans l'exemple ci-dessus, lorsque le programme exécute l'instruction panic(), le programme arrêtera l'exécution et affichera le message d'erreur "Quelque chose s'est mal passé" .

Catching Panic

Parce que Panic peut entraîner l'arrêt de l'exécution d'un programme, cela rend la gestion des erreurs à l'aide de Panic potentiellement délicate dans certains cas. Afin d'empêcher le programme de s'arrêter en raison d'une panique, Golang fournit un mécanisme de gestion de la panique afin que le programme puisse continuer à s'exécuter après une panique.

Il existe deux façons d’attraper la panique. La première consiste à utiliser la fonction recovery(), qui peut récupérer l’erreur de panique générée. La deuxième méthode consiste à utiliser une instruction defer pour détecter la panique. L'instruction defer sera exécutée avant le retour de la fonction.

Voici la syntaxe pour capturer Panic à l'aide de la fonction recovery() :

func main() {

fmt.Println("Go Panic Example")
defer func(){
    if r := recover(); r != nil {
        fmt.Println("Recovered from : ", r)
    }
}()
panic("Something went wrong")
fmt.Println("Program Restarts from Here")
Copier après la connexion

}

Sortie :

Exemple Go Panic
Récupéré de : Quelque chose s'est mal passé

Dans le code ci-dessus , Nous utilisons la fonction defer() pour attraper Panic. Lorsque la panique se produit, l'instruction defer sera exécutée et la fonction recovery() sera exécutée pour récupérer l'erreur de panique. Nous avons ensuite imprimé le message d'erreur "Récupéré de : Quelque chose s'est mal passé".

Nous pouvons également utiliser plusieurs instructions de report pour attraper Panic. Par exemple, le code suivant montre l'utilisation de plusieurs instructions defer pour détecter Panic :

func main() {

fmt.Println("Go Panic Example")
defer func(){
    if r := recover(); r != nil {
        fmt.Println("Recovered from : ", r)
    }
}()
defer fmt.Println("This will be printed first")
panic("Something went wrong")
defer fmt.Println("This will be printed last")
fmt.Println("Program Restarts from Here")
Copier après la connexion

}

Sortie :

Exemple Go Panic
Ceci sera imprimé en premier
Récupéré de : Quelque chose s'est mal passé
Ceci sera imprimé en dernier

Dans le code ci-dessus, nous utilisons plusieurs instructions defer, la première instruction defer est exécutée avant que Panic ne se produise et la deuxième instruction defer est exécutée après la récupération de Panic. L'ordre d'exécution est l'inverse de l'ordre dans lequel ils apparaissent dans le code.

Remarque : une fois la panique survenue, le programme cessera d'exécuter les instructions defer et aucune instruction defer ne sera exécutée. Par conséquent, vous devez prendre en compte les opérations effectuées avant que la panique ne se produise pour vous assurer qu'aucune donnée importante n'est perdue.

Résumé

Grâce à l'introduction de cet article, vous avez déjà compris l'usage de la panique dans Golang et le mécanisme de capture de la panique. Lorsque vous utilisez Panic pour la gestion des erreurs, il faut veiller à ce que le programme ne plante pas en raison d'erreurs non gérées. Et, en cas de problème, assurez-vous de prendre les mesures appropriées pour protéger vos données et d'autres parties de votre application.

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 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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement? GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement? Mar 03, 2025 pm 05:17 PM

Cet article explique les mécanismes d'importation des packages de Go: les importations nommées (par exemple, importation & quot; fmt & quot;) et les importations vierges (par exemple, importation _ & quot; fmt & quot;). Les importations nommées rendent le contenu du package accessible, tandis que les importations vierges ne font que l'exécuter t

Comment mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego? Comment mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego? Mar 03, 2025 pm 05:22 PM

Cet article explique la fonction Newflash () de Beego pour le transfert de données inter-pages dans les applications Web. Il se concentre sur l'utilisation de NewFlash () pour afficher les messages temporaires (succès, erreur, avertissement) entre les contrôleurs, en tirant parti du mécanisme de session. Limiter

Comment convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go? Comment convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go? Mar 03, 2025 pm 05:18 PM

Cet article détaille la conversion efficace de la requête MySQL Resulte en tranches de structure GO. Il met l'accent sur l'utilisation de la méthode de numérisation de la base de données / SQL pour des performances optimales, en évitant l'analyse manuelle. Meilleures pratiques pour la cartographie des champs struct à l'aide de balises DB et de robus

Comment écrire des objets et des talons simulés pour les tests en Go? Comment écrire des objets et des talons simulés pour les tests en Go? Mar 10, 2025 pm 05:38 PM

Cet article montre la création de simulations et de talons dans GO pour les tests unitaires. Il met l'accent sur l'utilisation des interfaces, fournit des exemples d'implémentations simulées et discute des meilleures pratiques telles que la tenue de simulations concentrées et l'utilisation de bibliothèques d'assertion. L'articl

Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go? Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go? Mar 10, 2025 pm 03:20 PM

Cet article explore les contraintes de type personnalisé de Go pour les génériques. Il détaille comment les interfaces définissent les exigences de type minimum pour les fonctions génériques, améliorant la sécurité du type et la réutilisabilité du code. L'article discute également des limitations et des meilleures pratiques

Comment écrire des fichiers dans GO Language de manière pratique? Comment écrire des fichiers dans GO Language de manière pratique? Mar 03, 2025 pm 05:15 PM

Cet article détaille la rédaction de fichiers efficace dans GO, en comparant OS.WriteFile (adapté aux petits fichiers) avec OS.OpenFile et Buffered Writes (optimal pour les fichiers volumineux). Il met l'accent sur la gestion robuste des erreurs, l'utilisation de différer et la vérification des erreurs spécifiques.

Comment rédigez-vous des tests unitaires en Go? Comment rédigez-vous des tests unitaires en Go? Mar 21, 2025 pm 06:34 PM

L'article traite des tests d'unité d'écriture dans GO, couvrant les meilleures pratiques, des techniques de moquerie et des outils pour une gestion efficace des tests.

Comment puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO? Comment puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO? Mar 10, 2025 pm 05:36 PM

Cet article explore l'utilisation d'outils de traçage pour analyser le flux d'exécution des applications GO. Il traite des techniques d'instrumentation manuelles et automatiques, de comparaison d'outils comme Jaeger, Zipkin et OpenTelelemetry, et mettant en évidence une visualisation efficace des données

See all articles