>백엔드 개발 >Golang >HTTP 응답 본문을 읽은 후 `xml.NewDecoder()`에서 EOF 오류가 발생하는 이유는 무엇입니까?

HTTP 응답 본문을 읽은 후 `xml.NewDecoder()`에서 EOF 오류가 발생하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-02 03:09:021047검색

Why Does `xml.NewDecoder()` Throw an EOF Error After Reading the HTTP Response Body?

본문 콘텐츠를 읽은 후 xml.NewDecoder()에서 XML 디코딩 오류 발생

HTTP 응답 본문에서 XML을 디코딩하려고 할 때 개발자는 다음과 같은 문제가 발생할 수 있습니다. xml.NewDecoder()에서 EOF(파일 끝) 오류가 발생합니다. 이 오류는 일반적으로 본문 콘텐츠를 이미 읽었거나 처리한 경우에 발생합니다.

제공된 코드 샘플에는 ioutil.ReadAll()을 사용하여 응답 본문을 처음 읽는 섹션이 포함되어 있습니다. 이 작업은 전체 본문 콘텐츠를 사용하므로 후속 작업에 사용할 수 없습니다. 결과적으로 xml.NewDecoder()를 사용하여 본문을 읽으면 파일 끝에 도달하여 EOF 오류가 발생합니다.

이 오류를 방지하려면 응답 본문 콘텐츠를 읽기 작업을 수행하기 전에 변수입니다. 이를 통해 xml.NewDecoder()와 같은 다른 함수가 EOF 오류를 발생시키지 않고 콘텐츠에 액세스할 수 있습니다.

샘플 코드 수정:

<code class="go">var bodyContent []byte

resp1, err := client.Do(req1)
error_handler(err)

defer resp1.Body.Close()
bodyContent, err = ioutil.ReadAll(resp1.Body)
error_handler(err)
resp1.Body = ioutil.NopCloser(bytes.NewBuffer(bodyContent))

if err := xml.NewDecoder(resp1.Body).Decode(&v); err != nil {
    fmt.Printf("error is : %v", err)
    return
}</code>

소개하여 bodyContent 변수를 사용하고 resp1.Body를 업데이트하면 두 작업 모두에 콘텐츠를 재사용할 수 있습니다. 이 접근 방식을 사용하면 EOF 오류가 제거되고 성공적인 XML 디코딩이 가능해집니다.

위 내용은 HTTP 응답 본문을 읽은 후 `xml.NewDecoder()`에서 EOF 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.