> 백엔드 개발 > Golang > Goroutine을 사용하면 Go의 HTTP 핸들러에서 '다중 응답.WriteHeader 호출'이 발생하는 이유는 무엇입니까?

Goroutine을 사용하면 Go의 HTTP 핸들러에서 '다중 응답.WriteHeader 호출'이 발생하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-10 06:53:00
원래의
554명이 탐색했습니다.

Why Does Using Goroutines Cause

Go의 HTTP 핸들러에서 다중 WriteHeader 호출

net/http 서버를 갖춘 간단한 Go 프로그램에서 개발자는 "다중 응답"을 접하게 됩니다. HTTP 요청을 처리하려고 할 때 .WriteHeader 호출" 오류가 발생했습니다. 핸들러 함수가 헤더를 한 번 작성하고 정적 본문을 제공하도록 설계되었음에도 불구하고 프로그램이 HandleIndex 함수를 실행하기 위해 고루틴을 통합할 때 오류가 발생합니다.

오류 설명

들어오는 요청을 처리하는 익명 함수는 URL을 인쇄하고 새 고루틴에서 HandleIndex 함수를 시작한 후 실행을 진행합니다. 핸들러 함수가 Write에 대한 초기 호출 전에 응답 상태 설정을 생략하면 Go는 자동으로 상태를 200(HTTP OK)으로 설정합니다. 또한 핸들러 함수가 응답에 내용을 쓰지 않고(응답 상태를 설정하지 않고 정상적으로 완료되는 경우) 성공적인 요청 처리로 간주되어 응답 상태가 200이 됩니다.

이 경우 익명 함수는 응답 상태를 설정하지 않으며 응답에 아무 것도 쓰지 않습니다. 따라서 Go는 응답 상태를 200 HTTP OK로 설정합니다. 각 요청은 자체 고루틴에서 처리되므로 HandleIndex가 새 고루틴에서 호출되면 원래 익명 함수는 응답 헤더 설정을 포함하여 계속 실행됩니다. 동시에 새로 시작된 고루틴은 응답 헤더도 설정하여 "다중 응답.WriteHeader 호출" 오류를 발생시킵니다.

해결책: 고루틴 제거

"go" 키워드를 사용하면 HandleIndex가 핸들러 함수와 동일한 고루틴에서 호출되어 핸들러 함수가 반환되기 전에 응답 헤더가 설정되도록 합니다. 이렇게 하면 "net/http" 패키지가 응답 헤더를 다시 설정하려고 시도하는 것을 방지하여 오류를 해결할 수 있습니다.

위 내용은 Goroutine을 사용하면 Go의 HTTP 핸들러에서 '다중 응답.WriteHeader 호출'이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿