Created
July 27, 2014 06:53
-
-
Save ciaranarcher/abccf50cb37645ca27fa to your computer and use it in GitHub Desktop.
Wrapping a ResponseWriter to capture the status code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Create our own MyResponseWriter to wrap a standard http.ResponseWriter | |
// so we can store the status code. | |
type MyResponseWriter struct { | |
status int | |
http.ResponseWriter | |
} | |
func NewMyResponseWriter(res http.ResponseWriter) *MyResponseWriter { | |
// Default the status code to 200 | |
return &MyResponseWriter{200, res} | |
} | |
// Give a way to get the status | |
func (w MyResponseWriter) Status() int { | |
return w.status | |
} | |
// Satisfy the http.ResponseWriter interface | |
func (w MyResponseWriter) Header() http.Header { | |
return w.ResponseWriter.Header() | |
} | |
func (w MyResponseWriter) Write(data []byte) (int, error) { | |
return w.ResponseWriter.Write(data) | |
} | |
func (w MyResponseWriter) WriteHeader(statusCode int) { | |
// Store the status code | |
w.status = statusCode | |
// Write the status code onward. | |
w.ResponseWriter.WriteHeader(statusCode) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
http.Pusher interface can be implemented, as the documentation states
// Push returns ErrNotSupported if the client has disabled push or if push
// is not supported on the underlying connection.
http.Hijacker interface isn't implemented in http2 connections.