Maison > développement back-end > Golang > Comment puis-je détecter et gérer les paniques en Go ?

Comment puis-je détecter et gérer les paniques en Go ?

Mary-Kate Olsen
Libérer: 2024-11-13 13:46:02
original
293 Les gens l'ont consulté

How Can I Catch and Handle Panics in Go?

Attraper la panique en Go

À Golang, les paniques sont des conditions exceptionnelles qui peuvent provoquer une interruption anormale du programme. Par défaut, les paniques arrêtent l'exécution, affichant une trace de pile. Cependant, il est possible d'« attraper » ces paniques et de les gérer avec grâce.

Scénario :

Considérez le code suivant :

package main

import (
    "fmt"
    "os"
)

func main() {
    file, err := os.Open(os.Args[1])
    if err != nil {
        fmt.Println("Could not open file")
    }
    fmt.Printf("%s", file)
}
Copier après la connexion

Si aucun argument de fichier n'est fourni, une panique est lancée à la ligne 9 : "panic: runtime error: index out of range."

Solution :

Pour attraper ceci panique, nous pouvons utiliser la fonction recovery(). recovery() permet à une goroutine de se remettre d'une panique et de renvoyer la valeur transmise à l'appel de panique.

package main

import (
    "fmt"
    "os"
)

func main() {
    defer func() {
        if err := recover(); err != nil {
            fmt.Println("Error:", err)
        }
    }()

    file, err := os.Open(os.Args[1])
    if err != nil {
        panic(err)
    }
    fmt.Printf("%s", file)
}
Copier après la connexion

Avec cette modification, le code peut désormais intercepter la panique et la gérer en imprimant un message d'erreur.

Attention :

La panique n'est pas une solution idéale pour tous les scénarios de gestion des erreurs. La philosophie de conception de Go met l'accent sur la vérification explicite des erreurs plutôt que sur la panique. Cependant, le mécanisme recovery() permet de capturer les paniques inattendues et d'effectuer des opérations de nettoyage.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal