Maison  >  Article  >  développement back-end  >  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
Mary-Kate Olsenoriginal
2024-11-13 13:46:02270parcourir

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

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

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!

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