Go의 http.HandleFunc를 사용하는 HTTP 요청 처리 영역에서는 코드 내에서 컨텍스트 값을 전파해야 하는 경우가 종종 발생합니다. 기존 접근 방식에는 사용자 정의 컨텍스트 키를 설정하고 context.WithValue 함수를 활용하는 것이 포함되지만 원래 요청 객체를 덮어쓸 가능성에 대한 우려가 발생할 수 있습니다.
이 문제를 해결하려면 우려되는 점은 수정된 접근 방식을 통해 요청 개체 덮어쓰기가 제거된다는 점입니다. 대신 Request.WithContext 메서드를 사용하여 요청의 단순 복사본을 만들고 원본 개체와 해당 컨텍스트를 유지합니다. 이 얕은 복사본에 대한 포인터를 반환함으로써 후속 코드는 원래 요청을 방해하지 않고 업데이트된 컨텍스트에서 작동합니다.
// Context key to store the value var myContext = contextKey("myContext") // Function to set a context value func setValue(r *http.Request, val string) *http.Request { return r.WithContext(context.WithValue(r.Context(), myContext, val)) } // http.HandleFunc example http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { r = setValue(r, "foobar") })
이 수정된 코드에서 setValue 함수는 요청의 얕은 복사본으로 새 요청에 컨텍스트 값을 추가합니다. 원래 요청은 그대로 유지되어 요청 처리 프로세스 전체에서 컨텍스트의 무결성을 보장합니다.
수정된 컨텍스트가 후속 핸들러에 전달되도록 하려면 업데이트된 요청이 개체는 다른 처리기에 명시적으로 전달되어야 합니다. 이는 다음과 같이 수행할 수 있습니다.
// Passing the updated request to another handler http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { r = setValue(r, "foobar") someOtherHandler.ServeHTTP(w, r) })
이러한 지침을 따르면 컨텍스트 값을 http.HandleFuncs 내에서 효과적으로 설정 및 전파하여 원래 요청 객체의 무결성을 유지하고 요청 전반에 걸쳐 원활한 컨텍스트 흐름을 보장할 수 있습니다. -취급과정.
위 내용은 원래 요청 객체를 덮어쓰지 않고 Go에서 http.HandleFunc 내에서 컨텍스트 값을 효과적으로 전파하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!