Maison > développement back-end > Golang > Comment gérer les erreurs dans les chaînes de middleware Go ?

Comment gérer les erreurs dans les chaînes de middleware Go ?

Barbara Streisand
Libérer: 2024-12-05 20:12:12
original
508 Les gens l'ont consulté

How to Handle Errors in Go Middleware Chains?

Modèle de middleware avec gestionnaires de retour d'erreurs

Question : Comment puis-je combiner le modèle de middleware Go avec des gestionnaires de requêtes qui renvoient des erreurs ?

Réponse :

Le modèle middleware dans Go permet de créer des composants réutilisables pouvant être appliqués aux gestionnaires HTTP. Cependant, les fonctions middleware traditionnelles ne gèrent pas nativement les erreurs.

Pour activer la gestion des erreurs dans le middleware, il est recommandé d'utiliser une fonction middleware distincte dédiée à cet effet. Cette fonction doit être placée à la fin de la chaîne middleware et gérer les erreurs renvoyées par les gestionnaires au sein de la chaîne.

// Pattern for a middleware function that checks for errors from the next handler.
func errorHandler(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        err := next.ServeHTTP(w, r)
        if err != nil {
            // Handle the error, e.g., by logging or returning an appropriate HTTP response.
        }
    })
}
Copier après la connexion

Exemple :

Pour combiner les erreurs- renvoyant les gestionnaires avec le middleware de journalisation de l'exemple d'origine :

type errorHandler func(http.ResponseWriter, *http.Request) error

// Create a special error-aware logging middleware.
func loggingWithErrorHandler(next errorHandler) errorHandler {
    return func(w http.ResponseWriter, r *http.Request) error {
        // Before executing the handler.
        start := time.Now()
        log.Printf("Started %s %s", r.Method, r.URL.Path)
        err := next(w, r)
        // After executing the handler.
        log.Printf("Completed %s in %v", r.URL.Path, time.Since(start))
        return err
    }
}

// Define an error-returning handler func.
func errorHandlerFunc(w http.ResponseWriter, r *http.Request) error {
    w.Write([]byte("Hello World from errorHandlerFunc!"))
    return nil
}

// Assemble the middleware chain and error-aware middleware.
http.Handle("/", loggingWithErrorHandler(errorHandlerFunc))
Copier après la connexion

Cette combinaison permet la gestion des erreurs tout en conservant les avantages du middleware modèle. Le middleware encapsulé et sensible aux erreurs gérera toutes les erreurs renvoyées par le gestionnaire encapsulé.

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