Mux库只有一种设置未找到的处理程序的方法,它为您提供了一种在Mux无法将URL解析为其已知映射的情况下拦截请求的方法。
例如,您这样做:
mux.Handle("/foo",fooFunc)mux.Handle("/bar",barFunc)但是客户端访问
/baz的多路复用器没有映射。
他们实际上并没有截取去往客户端的404,而只是在遇到此问题时调用未找到的处理程序。
此外,如果/ foo处理程序发送404响应,则不会调用未找到的响应。
如果您希望自定义页面用于来自映射URL的各种返回响应,只需使各种处理程序编写正确的响应即可。
如果您不控制该逻辑(即:框架正在写东西并且没有覆盖方法),则您可能希望拦截所有请求并使用响应代码检测逻辑覆盖http.ResposeWriter。
这是一个示例拦截器,基本上可以满足您的要求。在播放
package mainimport ( "fmt" "log")import "net/http"type Interceptor struct { origWriter http.ResponseWriter overridden bool}func (i *Interceptor) WriteHeader(rc int) { switch rc { case 500: http.Error(i.origWriter, "Custom 500 message / content", 500) case 404: http.Error(i.origWriter, "Custom 404 message", 404) case 403: i.origWriter.WriteHeader(403) fmt.Fprintln(i.origWriter, "Custom 403 message") default: i.origWriter.WriteHeader(rc) return } // if the default case didn't execute (and return) we must have overridden the output i.overridden = true log.Println(i.overridden)}func (i *Interceptor) Write(b []byte) (int, error) { if !i.overridden { return i.origWriter.Write(b) } // Return nothing if we've overriden the response. return 0, nil}func (i *Interceptor) Header() http.Header { return i.origWriter.Header()}


