미들웨어 및 HandlerFunc에서 컨텍스트 전달
Go에서 컨텍스트 패키지는 요청 핸들러 간에 정보를 전달하는 기능을 제공합니다. 이는 핸들러 함수 실행 전후에 작업을 수행할 수 있는 미들웨어에 특히 유용합니다.
컨텍스트 생성 및 전달
미들웨어의 맥락에서 우리는 요청 컨텍스트에서 context.WithValue를 호출하고 키와 값 쌍을 제공하여 새 컨텍스트를 생성할 수 있습니다. 그런 다음 핸들러의 ServeHTTP 메소드를 호출할 때 이 새로운 컨텍스트를 사용해야 합니다.
예를 들어 제공된 코드 조각에서 checkAuth 미들웨어 함수는 요청 컨텍스트와 인증 토큰을 입력으로 받습니다. 인증 토큰을 확인하는 래핑된 핸들러 함수를 반환합니다.
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 } h.ServeHTTP(w, r) }) } }
인증 토큰으로 컨텍스트를 초기화하려면 아래와 같이 요청 컨텍스트에서 context.WithValue를 호출할 수 있습니다.
func main() { authToken, ok := getAuthToken() if !ok { panic("...") } ctx := context.WithValue(r.Context(), "auth_token", authToken) router.Handle("/hello", util.UseMiddleware(authCheck, Handler, ...)) }
이 새로운 컨텍스트는 미들웨어 핸들러가 원래 핸들러의 ServeHTTP를 호출할 때 사용됩니다. method.
핸들러에서 컨텍스트 액세스
핸들러는 현재 컨텍스트를 반환하는 r.Context()를 호출하여 컨텍스트 정보에 액세스할 수 있습니다. 아래 코드 조각에 표시된 대로 Value 메서드를 사용하여 값을 검색할 수 있습니다.
func (h *HandlerW) ServeHTTP(w http.ResponseWriter, r *http.Request) { authToken := r.Context().Value("auth_token").(string) // ... }
위 내용은 Go HTTP 핸들러 및 미들웨어에서 컨텍스트 정보를 어떻게 전달하고 액세스할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!