第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在 golang 中間件中獲取 Response statusCode?

如何在 golang 中間件中獲取 Response statusCode?

Go
呼如林 2023-05-08 15:54:51
如何在 golang 中間件中獲取 Response statusCode?ResponseWriter 只有WriteHeader 接口,找不到get 接口。
查看完整描述

4 回答

?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊

這種方法是可行的。


    type loggingResponseWriter struct {

        http.ResponseWriter

        statusCode int

    }


    func NewLoggingResponseWriter(w http.ResponseWriter) *loggingResponseWriter {

        return &loggingResponseWriter{w, http.StatusOK}

    }


    func (lrw *loggingResponseWriter) WriteHeader(code int) {

        lrw.statusCode = code

        lrw.ResponseWriter.WriteHeader(code)

    }


    func wrapHandlerWithLogging(wrappedHandler http.Handler) http.Handler {

        return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {

            log.Printf("--> %s %s", req.Method, req.URL.Path)


            lrw := NewLoggingResponseWriter(w)

            wrappedHandler.ServeHTTP(lrw, req)


            statusCode := lrw.statusCode

            log.Printf("<-- %d %s", statusCode, http.StatusText(statusCode))

        })

    }


查看完整回答
反對(duì) 回復(fù) 2023-05-08
?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊

使用內(nèi)格羅尼。它的工作原理與@huangapple 的答案相同,但處理程序?qū)嶋H上實(shí)現(xiàn)了所有接口。


import (

    "github.com/urfave/negroni"

)


func wrapHandlerWithLogging(wrappedHandler http.Handler) http.Handler {

    return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {

        log.Printf("--> %s %s", req.Method, req.URL.Path)


        lrw := negroni.NewResponseWriter(w)

        wrappedHandler.ServeHTTP(lrw, req)


        statusCode := lrw.Status()

        log.Printf("<-- %d %s", statusCode, http.StatusText(statusCode))

    })

}


查看完整回答
反對(duì) 回復(fù) 2023-05-08
?
慕桂英546537

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊

長(zhǎng)話短說,您應(yīng)該自己包裝 http.ResponseWriter 或使用庫(kù)。如果你想自己實(shí)現(xiàn)它,你可以從Negroni源代碼中找到一些提示



查看完整回答
反對(duì) 回復(fù) 2023-05-08
?
精慕HU

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊

在我的例子中,我不使用外部庫(kù),我不想包裝http.ResponseWriter. 我必須在請(qǐng)求的上下文中添加響應(yīng)的狀態(tài),以便以后在日志記錄中使用。所以我創(chuàng)建了一個(gè)小幫手來同時(shí)在 ResponseWriter 和請(qǐng)求的上下文中寫入狀態(tài)。


type AppContext string

var StatusCode = AppContext("statuCode")


func WriteHeaderAndContext(w http.ResponseWriter, statusCode int, r *http.Request) {

    ctx := context.WithValue(r.Context(), StatusCode, statusCode)

    *r = *(r.WithContext(ctx))


    w.WriteHeader(statusCode)

}

在日志記錄中,我將值檢索為


r.Context().Value(StatusCode)

缺點(diǎn)發(fā)生在被叫方,看起來有點(diǎn)不尋常。例如


WriteHeaderAndContext(w, http.StatusCreated, r)

我們通常做的地方


w.WriteHeader(http.StatusCreated)


查看完整回答
反對(duì) 回復(fù) 2023-05-08
  • 4 回答
  • 0 關(guān)注
  • 342 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)