Maison > développement back-end > Golang > Comment puis-je gérer efficacement les erreurs au sein de mon application Web Gin en utilisant une approche middleware ?

Comment puis-je gérer efficacement les erreurs au sein de mon application Web Gin en utilisant une approche middleware ?

DDD
Libérer: 2024-11-01 11:42:29
original
453 Les gens l'ont consulté

How can I effectively handle errors within my Gin web application using a middleware approach?

Amélioration de la gestion des erreurs dans Gin

La gestion personnalisée des erreurs avec Gin implique l'utilisation d'un middleware pour gérer les réponses d'erreur. Cela permet de séparer la logique d'erreur de la logique de flux normale.

Middleware de gestion des erreurs

<code class="go">type appError struct {
    Code    int
    Message string
}

func JSONAppErrorReporter() gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Next()
        errors := c.Errors.ByType(gin.ErrorTypeAny)

        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",
                }
            }
            // Respond with JSON serialized error
            c.IndentedJSON(parsedError.Code, parsedError)
            c.Abort()
        }
    }
}</code>
Copier après la connexion

Utilisation dans les fonctions de gestionnaire

<code class="go">func fetchSingleHostGroup(c *gin.Context) {
    hostgroupID := c.Param("id")

    hostGroupRes, err := getHostGroupResource(hostgroupID)

    if err != nil {
        // Attach error to the context
        c.Error(err)
        return
    }

    // Respond with valid data
    c.JSON(http.StatusOK, *hostGroupRes)
}</code>
Copier après la connexion

Configuration du serveur

<code class="go">func main() {
    router := gin.Default()
    router.Use(JSONAppErrorReporter())
    router.GET("/hostgroups/:id", fetchSingleHostGroup)
    router.Run(":3000")
}</code>
Copier après la connexion

Ressources supplémentaires

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

  • [numéro gin-gonic #327](https://github.com/gin-gonic/gin/issues/327)
  • [numéro gin-gonic #651](https://github.com/gin-gonic/gin/issues/651)
  • [chirp](https://github.com/go-chi/chi/tree/master/ middleware)
  • [gin-merry](https://github.com/gin-contrib/gin-merry)
  • [gin-frsh-showerrors](https://github. com/frsh/gin-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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal