將 Golang 請求中的上下文傳遞給中間件
理解 Golang 1.7 中引入的上下文機制可能具有挑戰性。本文旨在闡明如何有效地將上下文傳遞給中間件和處理函數。
派生上下文
正如 Go 並發模式博客文章中提到的,您可以派生上下文從背景語境來看。 Request 物件也提供 Context 和 WithContext 方法。這允許您為特定目的建立自訂上下文。
實作逾時
在請求處理程序中,您可以使用 WithTimeout 方法指定逾時。這將建立一個具有設定逾時的派生上下文。
ctx, cancel := context.WithTimeout(r.Context(), time.Duration(60*time.Second)) defer cancel() r = r.WithContext(ctx)
將使用者資訊新增至上下文
在授權檢查器中,您可以在先前將使用者資訊新增至上下文呼叫 ServeHTTP。
type ContextKey string const ContextUserKey ContextKey = "user" // ... ctx := context.WithValue(r.Context(), ContextUserKey, "theuser") h.ServeHTTP(w, r.WithContext(ctx))
從上下文中擷取使用者資訊
在處理程序中,您可以從上下文中存取使用者資訊。
user := r.Context().Value(ContextUserKey) doSomethingForThisUser(user.(string))
使用上下文連結中間件
在主函數中,您可以使用util.UseMiddleware 連結中介軟體處理程序,在每個處理程序之間傳遞上下文。
router.Handle("/hello", util.UseMiddleware(authCheck, HandlerW, ...))
結論
按照以下步驟,您可以有效地將Golang 請求中的上下文傳遞給中間件和處理函數,從而增強靈活性並維護程式碼中的線程安全。
以上是如何有效地將上下文傳遞給 Golang 中的中介軟體和處理程序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!