Handling panic elegantly:
package main import ( "fmt" "log" "net/http" ) func handle() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { panic("i am panic") } } func handlePanic(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { defer func() { if i := recover(); i != nil { log.Printf("panic at %s: %v", r.URL.Path, i) w.WriteHeader(http.StatusInternalServerError) fmt.Fprint(w, http.StatusText(http.StatusInternalServerError)) } }() next(w, r) } } func main() { http.ListenAndServe(":8000", handlePanic(handle())) }
Top comments (0)