Maison  >  Article  >  développement back-end  >  Comment attraper la panique au Go ?

Comment attraper la panique au Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-12 17:47:02718parcourir

How Can You Catch Panics in Go?

Attraper la panique dans Go

Lors de la gestion d'événements inattendus dans Go, la panique est un mécanisme courant pour indiquer une erreur critique. Cependant, il est parfois souhaitable de gérer ces paniques avec élégance et de poursuivre l'exécution.

Dans le code fourni :

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, le programme panique en raison d'un manque de -indice de plage. Dans de tels cas, nous pouvons utiliser la fonction recovery() pour attraper et gérer la panique.

Utiliser recovery() pour gérer les paniques

La fonction recovery() permet un programme pour reprendre le contrôle après une panique. Elle peut être utilisée au sein d'une fonction différée, qui sera exécutée même si une panique survient dans la fonction principale.

func main() {
    defer func() {
        if recovered := recover(); recovered != nil {
            // Handle the panic here
            fmt.Println("File not provided")
        }
    }()

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

Dans ce code modifié, la fonction recovery() est utilisée au sein d'une fonction différée. Si une panique se produit, recovery() renverra la valeur transmise à l'appel de panique. Dans ce cas, il renverra nil puisque nous n'avons spécifié aucune valeur de panique.

En vérifiant la valeur de retour de recovery(), nous pouvons gérer la panique de manière appropriée, comme l'impression d'un message d'erreur et la poursuite de l'exécution. .

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