package router import ( "net/http" ) type wrappedResponseWriter struct { Rw http.ResponseWriter Ignore bool } func (wrw *wrappedResponseWriter) WriteHeader(status int) { if status==404 { wrw.Ignore=true } else { wrw.Rw.WriteHeader(status) } } func (wrw *wrappedResponseWriter) Write(p []byte) (int, error) { if wrw.Ignore { return 0, nil } return wrw.Rw.Write(p) } func (wrw *wrappedResponseWriter) Header() http.Header { return wrw.Rw.Header() } type wrappedHandler struct { h http.Handler } func (wh *wrappedHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { wrw := wrappedResponseWriter{w, false} wh.h.ServeHTTP(&wrw, r) if wrw.Ignore==true { wrw.Rw.Header().Del("Content-Encoding") wrw.Rw.Header().Del("Vary") wrw.Rw.Header().Set("Content-Type", "text/html; charset=utf-8") NotFoundHandler(wrw.Rw, r) } } func wrapHandler(handler http.Handler) http.Handler { return &wrappedHandler{handler} }