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

Comment implémenter une meilleure gestion des erreurs avec Gin ?

Mary-Kate Olsen
Libérer: 2024-10-31 12:06:31
original
760 Les gens l'ont consulté

How to Implement Better Error Handling with Gin?

Meilleure gestion des erreurs avec Gin

Dans cet article, nous explorerons comment implémenter une meilleure gestion des erreurs avec Gin, inspirée par une approche employé dans le cadre Go. Notre objectif est de centraliser la gestion des erreurs, ce qui facilite la gestion et réduit le code en double.

Type d'erreur personnalisé

Similaire au appError personnalisé. tapez dans le framework Go, définissons un type d'erreur personnalisé pour gérer les codes d'erreur et les messages de manière structurée :

<code class="go">type appError struct {
    Code     int    `json:"code"`
    Message  string `json:"message"`
}</code>
Copier après la connexion

Middleware pour le rapport d'erreurs

Pour centraliser gestion des erreurs, nous pouvons créer un middleware qui gérera les réponses d'erreur :

<code class="go">func JSONAppErrorReporter() gin.HandlerFunc {
    return jsonAppErrorReporterT(gin.ErrorTypeAny)
}

func jsonAppErrorReporterT(errType gin.ErrorType) gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Next()
        detectedErrors := c.Errors.ByType(errType)

        // Process errors and convert them to our custom error type
        if len(detectedErrors) > 0 {
            err := detectedErrors[0].Err
            parsedError := parseAPperror(err) 

            // Put error into response
            c.IndentedJSON(parsedError.Code, parsedError)
            c.Abort()
        }
    }
}</code>
Copier après la connexion

Dans ce middleware, les erreurs détectées sont analysées dans le type appError et renvoyées sous forme de réponses JSON.

Rapport d'erreurs dans le gestionnaire

Pour signaler les erreurs dans les fonctions du gestionnaire, nous utilisons gin.Context.Error():

<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

Avantages

Cette approche offre plusieurs avantages :

  • La gestion centralisée des erreurs simplifie la gestion des erreurs.
  • Le type d'erreur personnalisé permet un rapport d'erreurs structuré et informatif.
  • Le middleware intercepte les erreurs, les empêchant de se propager tout au long du cycle de requête.

Ressources supplémentaires

Pour des informations plus détaillées et des solutions alternatives, reportez-vous aux ressources suivantes :

  • [Problème Gin : Gestion des erreurs](https://github.com/gin-gonic/gin/issues/214)
  • [Problème Gin : Codes d'état dans la gestion des erreurs](https://github.com/gin-gonic/gin/issues/401)
  • [Gin-Merry : gestionnaire d'erreurs](https://github.com/gin- contrib/gin-merry)
  • [Gin-Frsh-Showerrors](https://github.com/Double0h/gin-frsh-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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!