Maison > développement back-end > Golang > Comment puis-je empêcher les boucles infinies lors de la gestion des erreurs personnalisées dans Go ?

Comment puis-je empêcher les boucles infinies lors de la gestion des erreurs personnalisées dans Go ?

Barbara Streisand
Libérer: 2024-12-13 16:06:14
original
783 Les gens l'ont consulté

How Can I Prevent Infinite Loops When Handling Custom Errors in Go?

Gestion des erreurs non récursives : prévenir les boucles infinies

Dans Go, les situations exceptionnelles sont généralement gérées à l'aide de valeurs d'erreur, qui implémentent l'interface d'erreur. La méthode Error() de l'interface renvoie une chaîne décrivant l'erreur.

Cependant, lorsque vous travaillez avec des types d'erreur personnalisés, il est essentiel d'éviter la récursion dans la méthode Error().

L'Infini Problème de boucle

Considérez un type d'erreur personnalisé où la méthode Error() appelle fmt.Sprint(e) pour convertir la valeur d'erreur en chaîne. Cette approche pose un problème potentiel :

type MyError struct {
    message string
}

func (e MyError) Error() string {
    return fmt.Sprint(e)
}
Copier après la connexion

Si vous essayez maintenant d'imprimer l'erreur, une boucle infinie se produit :

func main() {
    err := MyError{"Error!"}
    fmt.Println(err)
}
Copier après la connexion

Cela se produit car fmt.Sprint(e) appelle e .Error(), qui à son tour appelle à nouveau fmt.Sprint(e), et ainsi de suite.

Rupture du Récursion

Pour rompre la récursion, convertissez e en une valeur qui n'a pas de méthode String ou Error avant de la transmettre à fmt.Sprint :

func main() {
    err := MyError{"Error!"}
    fmt.Println(fmt.Sprint(float64(err)))
}
Copier après la connexion

Dans cet exemple, convertir e à un float64 supprime ses méthodes String et Error, empêchant la boucle infinie.

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