func (r *Response) Hijack(w http.ResponseWriter) {
	r.ResponseWriter = w
	r.status = http.StatusOK
	r.size = nonHeaderFlushed
}
Hijack resets the current *Response with new http.ResponseWriter
package gogo
import (
	"log"
	"net/http"
)
const (
	nonHeaderFlushed = -1
)
type Response struct {
	http.ResponseWriter
	status int
	size   int
}
func NewResponse(w http.ResponseWriter) Responser {
	response := &Response{
		ResponseWriter: w,
		status:         http.StatusOK,
		size:           nonHeaderFlushed,
	}
	return response
}
func (r *Response) WriteHeader(code int) {
	if code > 0 {
		r.status = code
		if r.HeaderFlushed() {
			log.Println("[WARN]", ErrHeaderFlushed.Error())
		}
	}
}
func (r *Response) Write(data []byte) (size int, err error) {
	r.FlushHeader()
	if data == nil {
		return
	}
	size, err = r.ResponseWriter.Write(data)
	r.size += size
	return
}
func (r *Response) Flush() {
	flusher, ok := r.ResponseWriter.(http.Flusher)
	if ok {
		flusher.Flush()
	} else {
		log.Println("[WARN] http.ResponseWriter does not implement http.Flusher")
	}
}
func (r *Response) Status() int {
	return r.status
}
func (r *Response) Size() int {
	return r.size
}
func (r *Response) HeaderFlushed() bool {
	return r.size != nonHeaderFlushed
}
func (r *Response) FlushHeader() {
	if r.HeaderFlushed() {
		return
	}
	r.size = 0
	r.ResponseWriter.WriteHeader(r.status)
}