Ich bin vertraut mit dem Go-Middleware-Muster wie folgt aus:Wie kann ich das Go-Middleware-Muster mit Fehleranfragehandlern kombinieren?
// Pattern for writing HTTP middleware.
func middlewareHandler(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Our middleware logic goes here before executing application handler.
next.ServeHTTP(w, r)
// Our middleware logic goes here after executing application handler.
})
}
So zum Beispiel, wenn ich eine loggingHandler hatte:
func loggingHandler(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Before executing the handler.
start := time.Now()
log.Printf("Strated %s %s", r.Method, r.URL.Path)
next.ServeHTTP(w, r)
// After executing the handler.
log.Printf("Completed %s in %v", r.URL.Path, time.Since(start))
})
}
Und ein einfaches handleFunc:
func handleFunc(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`Hello World!`))
}
ich konnte Kombiniere sie wie folgt:
Das ist alles in Ordnung.
Aber ich mag die Idee von Handlern, die Fehler wie normale Funktionen zurückgeben können. Dies erleichtert die Fehlerbehandlung erheblich, da ich einfach einen Fehler zurückgeben kann, wenn ein Fehler vorliegt, oder einfach nil am Ende der Funktion zurückgeben.
Ich habe es so gemacht:
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)
}
}
func errorHandle(w http.ResponseWriter, r *http.Request) error {
w.Write([]byte(`Hello World from errorHandle!`))
return nil
}
Und es dann verwenden, indem Sie es wie folgt Einwickeln:
http.Handle("/", errorHandler(errorHandle))
kann ich diese beiden Muster machen separat arbeiten, aber ich weiß nicht, wie ich sie kombinieren könnte. Ich mag es, dass ich Middlewares mit einer Bibliothek wie Alice ketten kann. Aber es wäre schön, wenn sie auch Fehler zurückgeben könnten. Gibt es einen Weg, dies zu erreichen?
So Sie will die fehler zurückgeben ... wo? Wer wäre der Anrufer, der den zurückgegebenen Fehler überprüfen würde? – zerkms