Maison > développement back-end > Golang > le corps du texte

Comment implémenter la gestion centralisée des erreurs dans le framework Gin ?

Linda Hamilton
Libérer: 2024-11-02 22:40:30
original
757 Les gens l'ont consulté

How to Implement Centralized Error Handling in the Gin Framework?

Meilleure gestion des erreurs dans Gin Framework

Gestion améliorée des erreurs avec un routeur HTTP personnalisé et un type d'erreur

Dans une discussion récente, une technique a été proposée pour améliorez la gestion des erreurs dans les applications HTTP Golang à l'aide de routeurs et de types d'erreurs personnalisés. L'objectif était de centraliser le rapport et la gestion des erreurs, en éliminant le besoin d'appels directs à c.JSON(500, err) au sein de gestionnaires spécifiques.

Implémentation de la gestion centralisée des erreurs dans Gin

Dans le Gin framework, cela peut être réalisé grâce à l'utilisation d'un middleware et de la méthode gin.Context.Error(). Voici comment cela fonctionne :

  1. Créer un middleware d'erreur : définissez un middleware personnalisé qui implémente l'interface gin.HandlerFunc. Ce middleware servira de point central pour la gestion des erreurs.
<code class="go">type AppError struct {
    Code     int    `json:"code"`
    Message  string `json:"message"`
}

func JSONAppErrorReporter(errType gin.ErrorType) gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Next()

        errors := c.Errors.ByType(errType)

        if len(errors) > 0 {
            err := errors[0].Err
            var parsedError *AppError

            switch err.(type) {
            case *AppError:
                parsedError = err.(*AppError)
            default:
                parsedError = &AppError{
                    code: http.StatusInternalServerError,
                    message: "Internal Server Error",
                }
            }

            c.IndentedJSON(parsedError.Code, parsedError)
            c.Abort()
        }
    }
}</code>
Copier après la connexion
  1. Utiliser le middleware : Enregistrez le middleware de gestion des erreurs dans la configuration de votre routeur.
<code class="go">router.Use(JSONAppErrorReporter(gin.ErrorTypeAny))</code>
Copier après la connexion
  1. Signaler les erreurs des gestionnaires : dans vos gestionnaires de chemin, au lieu de gérer directement les erreurs, utilisez gin.Context.Error() pour attacher des informations d'erreur au contexte de la demande. .
<code class="go">func fetchSingleHostGroup(c *gin.Context) {
    hostgroupID := c.Param("id")

    hostGroupRes, err := getHostGroupResource(hostgroupID)

    if err != nil {
        c.Error(err)
        return
    }

    c.JSON(http.StatusOK, *hostGroupRes)
}</code>
Copier après la connexion
  1. Configurer le serveur : Dans la configuration de votre serveur, configurez le routeur et exécutez le serveur.
<code class="go">router := gin.Default()
router.GET("/hostgroups/:id", fetchSingleHostGroup)
router.Run(":3000")</code>
Copier après la connexion

Ressources supplémentaires de gestion des erreurs

Pour plus d'informations sur la gestion des erreurs dans Gin, reportez-vous à ces ressources :

  • [Problème Gin-gonic : gestion des erreurs](https://github.com /gin-gonic/gin/issues/403)
  • [Problème Gin-gonic : codes d'état dans la gestion des erreurs](https://github.com/gin-gonic/gin/issues/264)
  • [Chirp](https://github.com/fengleng/chirp)
  • [Gestionnaire d'erreurs Gin-merry](https://github.com/savsgio/gin-merry)
  • [Gin-frsh-showerrors](https://github.com/emicklei/go-frsh/tree/master/showerrors)

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