이전 기사에서 "In go, HTTP 검사 방법 http.ResponseWriter에 기록된 응답은 무엇입니까?" 단위 테스트 환경에서 서버 응답을 검사하는 방법을 탐색했습니다. 그러나 이 접근 방식은 라이브 서버에는 적합하지 않을 수 있습니다.
대체 솔루션은 HTTP 수정 및 로깅에 일반적으로 사용되는 기술인 미들웨어 체이닝입니다. 원래 요청-응답 흐름을 유지하면서 응답 및 요청을 처리합니다.
negroni와 같은 라이브러리를 사용하는 대신 자체 함수 처리기를 만들 수 있습니다. 결합기:
<code class="go">func NewFooHandler(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // do something before next(w, r) // do something after } }</code>
결합기를 사용하여 여러 핸들러를 함께 연결할 수 있습니다:
<code class="go">h := NewFooHandler(NewBarHandler(NewBazHandler(Sink)))</code>
In 이 예에서 싱크는 아무것도 하지 않는 빈 핸들러입니다.
핸들러 결합자 접근 방식을 사용하면 응답을 기록하는 핸들러를 생성할 수 있습니다. :
<code class="go">func NewResponseLoggingHandler(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // Replace the response writer with a recorder c := httptest.NewRecorder() next(c, r) // Copy the response from the recorder to the actual writer for k, v := range c.HeaderMap { w.Header()[k] = v } w.WriteHeader(c.Code) c.Body.WriteTo(w) } }</code>
기본 핸들러 조합자를 생성하여 모든 HTTP 경로에 응답 로깅 핸들러를 적용할 수 있습니다.
<code class="go">func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc { return NewResponseLoggingHandler(NewOtherStuffHandler(next)) }</code>
이렇게 하면 다음과 같은 체인을 시작할 때마다
<code class="go">h := NewDefaultHandler(...)</code>
응답 로깅 및 기타 기본 핸들러가 자동으로 포함됩니다.
위 내용은 미들웨어 체인 및 기능적 핸들러 결합자를 사용하여 Go의 `http.HandleFunc`에서 HTTP 응답을 어떻게 기록할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!