首頁 >後端開發 >Golang >Golang 自訂 ServeHTTP 狀態日誌記錄

Golang 自訂 ServeHTTP 狀態日誌記錄

WBOY
WBOY轉載
2024-02-11 12:54:081348瀏覽

Golang 自定义 ServeHTTP 状态日志记录

php小編香蕉為您介紹Golang自訂ServeHTTP狀態日誌記錄。在Golang中,ServeHTTP函數是用來處理HTTP請求的關鍵函數之一。透過自訂ServeHTTP函數,我們可以記錄並追蹤每個請求的狀態信息,以便更好地了解和調試我們的應用程式。本文將詳細介紹如何在Golang中自訂ServeHTTP函數,並實現狀態日誌記錄的功能,以提升我們的開發效率和應用程式的穩定性。無論您是初學者還是有經驗的開發者,本文都將幫助您更好地理解和應用Golang的ServeHTTP函數。

問題內容

我正在建立自己的網路框架,並且遇到了問題,當我嘗試使用回應狀態碼記錄請求時,我收到錯誤:無效的記憶體位址或零指標取消引用 p>

我的 ServeHTTP 函數:

func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) {

    handler := r.getHandler(req.Method, req.URL.Path)
    if handler == nil {
        notFoundHandler(w, req)
        return
    }
    done := make(chan struct{})

    reqStruct := newReqStruct(w, req)

    go func() {
        handler(reqStruct)
        done <- struct{}{}
        close(done)
    }()
    <-done
    logger.logRequest(req.URL.Path, req.Method, req.Response.StatusCode)

}

解決方法

這一行:

logger.logRequest(req.URL.Path, req.Method, req.Response.StatusCode)

req.Response 只會針對 HTTP 重定向進行填入。在這種情況下,它將為零。

如果您想捕獲響應代碼,請編寫一個包裝響應編寫器並實現 WriteHeader 來捕獲響應代碼。

以上是Golang 自訂 ServeHTTP 狀態日誌記錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除