Maison >développement back-end >Golang >Comment implémenter la gestion centralisée des erreurs dans le framework Gin ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-11-02 22:40:30770parcourir

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>
  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>
  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>
  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>

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!

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