Go의 컨텍스트를 이해하는 것은 혼란스러울 수 있습니다. 미들웨어와 핸들러에 컨텍스트를 효과적으로 전달하는 방법을 살펴보겠습니다.
미들웨어에 컨텍스트를 전달하려면 다음 단계를 따르세요.
예를 들어, 요청 시간 초과:
ctx, cancel := context.WithTimeout(r.Context(), time.Duration(60*time.Second)) defer cancel() r = r.WithContext(ctx)
컨텍스트를 핸들러에 전달:
예를 들어 사용자 ID를 context:
ctx := context.WithValue(r.Context(), ContextUserKey, "theuser") h.ServeHTTP(w, r.WithContext(ctx))
다음은 context를 사용하는 미들웨어 및 핸들러 구현 예입니다.
func checkAuth(authToken string) util.Middleware { return func(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Header.Get("Auth") != authToken { util.SendError(w, "...", http.StatusForbidden, false) return } // Add authentication-specific context here h.ServeHTTP(w, r) }) } } type Handler struct { ... ... } func (h *HandlerW) ServeHTTP(w http.ResponseWriter, r *http.Request) { // Get context values here decoder := json.NewDecoder(r.Body) // ... } func main() { router := mux.NewRouter() authToken, ok := getAuthToken() if !ok { panic("...") } authCheck := checkAuth(authToken) h := Handler{ ... } router.Handle("/hello", util.UseMiddleware(authCheck, Handler, ...)) }
위 내용은 Go의 미들웨어 및 핸들러에서 컨텍스트를 올바르게 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!