"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment renvoyer une erreur si une fonction Go panique ?

Comment renvoyer une erreur si une fonction Go panique ?

Publié le 2024-11-18
Parcourir:135

How to Return an Error if a Go Function Panics?

Retour après un report dans Go

Vous rencontrez un problème où 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 : Une panique signale une erreur d'exécution qui peut être détectée par une récupération dans un 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 d'erreurs.Nouveau ().
  • La variable rep est invalidée après une erreur pour garantir qu'elle ne renvoie aucune donnée.
  • La variable rep est renvoyée comme nulle en cas d'erreur, ce qui correspond à votre signature de fonction originale.

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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3