golang 獲取statuscode

 最近日誌打印的時候須要打印狀態碼,可是由於interface的緣由直接獲取失敗,http.Request裏面的response不知道怎麼使用,因此就本身重寫writeheader,write來截取status日誌

type doneWriter struct {
    http.ResponseWriter
    done bool   status int
}

func (w *doneWriter) WriteHeader(status int) {
    w.done = true   w.status= status
    w.ResponseWriter.WriteHeader(status)
}

func (w *doneWriter) Write(b []byte) (int, error) {
    w.done = true
    return w.ResponseWriter.Write(b)
}

func myMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        dw := &doneWriter{ResponseWriter: w}
        next.ServeHTTP(dw, r)
        if dw.done {
            // Something already wrote a response
            return
        }
        // Nothing else wrote a response
        w.WriteHeader(http.StatusOK)
        // Whatever you want here
    }
}
相關文章
相關標籤/搜索