Maison >développement back-end >Golang >Comment Go Middleware peut-il gérer les gestionnaires de retour d'erreurs ?
Modèle de middleware avec gestionnaires de retour d'erreurs dans Go
Le modèle de middleware Go fournit un moyen pratique de composer des gestionnaires HTTP modulaires qui effectuent collectivement des tâches spécifiques. opérations avant, pendant ou après l’exécution de la fonction du gestionnaire principal. Cependant, ce modèle ne prend généralement pas en charge les gestionnaires qui renvoient des erreurs.
Pour remédier à cette limitation, on peut implémenter un middleware qui sert d'adaptateur pour les gestionnaires renvoyant des erreurs en traduisant l'erreur qu'ils renvoient en une réponse HTTP. . Ce middleware peut être ajouté comme dernier middleware de la chaîne, gérant le résultat final des gestionnaires composés. Voici un exemple :
type errorHandler func(http.ResponseWriter, *http.Request) error func (f errorHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { err := f(w, r) if err != nil { // log.Println(err) fmt.Println(err) os.Exit(1) } }
Ce middleware encapsule un gestionnaire de retour d'erreurs et garantit que toutes les erreurs qu'il génère sont traitées de manière appropriée. Pour utiliser ce middleware, créez simplement un wrapper pour le gestionnaire de retour d'erreur :
func errorHandle(w http.ResponseWriter, r *http.Request) error { w.Write([]byte(`Hello World from errorHandle!`)) return nil }
Et puis combinez-le avec votre chaîne de middleware, qui peut inclure d'autres middlewares qui ne renvoient pas d'erreurs :
middlewareChain := moreMiddleware(myMiddleware) http.Handle("/", middlewareChain(errorHandler(errorHandle)))
Cette approche vous permet de combiner le gestionnaire de retour d'erreurs avec d'autres middlewares de manière transparente, garantissant que toutes les erreurs sont traitées par le middleware du gestionnaire d'erreurs à la fin du processus. chaîne.
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!