middleware/recoverer.go
func Recoverer(next http.Handler) http.Handler {
	fn := func(w http.ResponseWriter, r *http.Request) {
		defer func() {
			if rvr := recover(); rvr != nil {

				logEntry := GetLogEntry(r)
				if logEntry != nil {
					logEntry.Panic(rvr, debug.Stack())
				} else {
					fmt.Fprintf(os.Stderr, "Panic: %+v\n", rvr)
					debug.PrintStack()
				}

				http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
			}
		}()

		next.ServeHTTP(w, r)
	}

	return http.HandlerFunc(fn)
}
func Recoverer(next http.Handler) http.Handler {
	fn := func(w http.ResponseWriter, r *http.Request) {
		defer func() {
			if rvr := recover(); rvr != nil {

				logEntry := GetLogEntry(r)
				if logEntry != nil {
					logEntry.Panic(rvr, debug.Stack())
				} else {
					fmt.Fprintf(os.Stderr, "Panic: %+v\n", rvr)
					debug.PrintStack()
				}

				http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
			}
		}()

		next.ServeHTTP(w, r)
	}

	return http.HandlerFunc(fn)
}
func Recoverer ( next http . Handler ) http . Handler { fn := func ( w http . ResponseWriter , r * http . Request ) { defer func ( ) { if rvr := recover ( ) ; rvr != nil { logEntry := GetLogEntry ( r ) if logEntry != nil { logEntry . Panic ( rvr , debug . Stack ( ) ) } else { fmt . Fprintf ( os . Stderr , " \n " , rvr ) debug . PrintStack ( ) } http . Error ( w , http . StatusText ( http . StatusInternalServerError ) , http . StatusInternalServerError ) } } ( ) next . ServeHTTP ( w , r ) } return http . HandlerFunc ( fn ) }
// Recoverer is a middleware that recovers from panics, logs the panic (and a
// backtrace), and returns a HTTP 500 (Internal Server Error) status if
// possible. Recoverer prints a request ID if one is provided.
//
// Alternatively, look at https://github.com/pressly/lg middleware pkgs.
Recoverer is a middleware that recovers from panics logs the panic ( and a backtrace ) and returns a HTTP 500 ( Internal Server Error ) status if possible . Recoverer prints a request ID if one is provided . Alternatively look at https : // github . com / pressly / lg middleware pkgs .