首頁 >後端開發 >Golang >如何在 http.HandleFunc 中設定上下文值而不覆寫請求物件?

如何在 http.HandleFunc 中設定上下文值而不覆寫請求物件?

Linda Hamilton
Linda Hamilton原創
2024-11-24 16:47:16697瀏覽

How to Set Context Value in an http.HandleFunc without Overwriting the Request Object?

如何在http.HandleFunc 中設定上下文值而不覆蓋請求物件

在提供的程式碼中,func setValue 中遵循的方法為在*http.Request 中設定上下文值會引發對覆蓋請求物件的擔憂。這是一個更正的方法:

func setValue(r *http.Request, val string) *http.Request {
  ctx := context.WithValue(r.Context(), myContext, val)
  return r.WithContext(ctx) // return shallow copy to avoid overwriting request object
}

在 http.HandleFunc 中設定上下文值時,使用更新的上下文傳回指向新建立的請求的指標。透過這樣做,我們可以避免修改原始請求對象,並確保後續處理程序收到正確的上下文值:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    r = setValue(r, "foobar")
})

如果處理程序呼叫另一個處理程序,請將更新後的請求與上下文值一起傳遞以確保連續性:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    r = setValue(r, "foobar")
    someOtherHandler.ServeHTTP(w, r) // pass updated request to subsequent handler
})

透過利用這種方法,我們可以在http.HandleFunc 中有效地設定上下文值,而不會影響原始請求物件。

以上是如何在 http.HandleFunc 中設定上下文值而不覆寫請求物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn