// +build ignore package main import ( "log" "net/http" ) type loggingWriter struct { http.ResponseWriter code int } var _ = http.ResponseWriter(&loggingWriter{}) func (l *loggingWriter) WriteHeader(code int) { l.code = code l.ResponseWriter.WriteHeader(code) } func main() { mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "index.html") }) mux.HandleFunc("/video.mp4", func(w http.ResponseWriter, r *http.Request) { w.Header().Add("ETag", "fake") http.ServeFile(w, r, "video.mp4") }) handler := func(w http.ResponseWriter, r *http.Request) { log.Printf("REQ %v %v %v", r.Method, r.URL, r.Header) lw := &loggingWriter{ResponseWriter: w} mux.ServeHTTP(lw, r) log.Printf("RES %d %v", lw.code, lw.Header()) } log.Fatal(http.ListenAndServe(":8000", http.HandlerFunc(handler))) }