Maison  >  Article  >  développement back-end  >  Comment renvoyer une erreur si une fonction Go panique ?

Comment renvoyer une erreur si une fonction Go panique ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-12 00:39:03215parcourir

How to Return an Error if a Go Function Panics?

Retour du report dans Go

Vous rencontrez un problème dans lequel vous souhaitez renvoyer une erreur si une fonction panique dans Go. Voici une analyse et un correctif pour votre code :

func getReport(filename string) (rep report, err error) {
    rep.data = make(map[string]float64)

    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in f", r)
            switch x := r.(type) {
            case string:
                err = errors.New(x)
            case error:
                err = x
            default:
                err = errors.New("Unknown panic")
            }
            rep = nil // Invalidate rep
        }
    }()
    panic("Report format not recognized.")
    // rest of the getReport function...
}

Concept de panique et de report

  • Panique : Un signal de panique une erreur d'exécution qui peut être détectée par une récupération dans une fonction defer.
  • Defer : Une instruction defer retarde l'exécution d'une fonction jusqu'à ce que la fonction environnante se termine.

Modifications dans le code :

  • La fonction defer utilise désormais des instructions switch-case pour gérer correctement la valeur récupérée.
  • Si la valeur récupérée est une chaîne, elle est convertie en erreur à l'aide de error.New().
  • La variable rep est invalidée après une erreur pour garantir qu'elle ne renvoie aucune donnée.
  • La variable rep est renvoyé comme nul en cas d'erreur, qui correspond à la signature de votre fonction d'origine.

Avec ces modifications, votre fonction getReport renverra une erreur si elle panique en raison d'un format de rapport non valide. Le message d'erreur sera soit la valeur de panique (s'il s'agit d'une chaîne), soit une erreur générique indiquant une panique inconnue.

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