>백엔드 개발 >Golang >당황하세요: '잘못된 메모리 주소 또는 Nil 포인터 역참조' 오류를 디버깅하는 방법은 무엇입니까?

당황하세요: '잘못된 메모리 주소 또는 Nil 포인터 역참조' 오류를 디버깅하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-21 04:45:10699검색

Go Panic: How to Debug

이동: 패닉: 런타임 오류: 잘못된 메모리 주소 또는 Nil 포인터 역참조

질문:

Go 프로그램을 실행할 때 다음과 같은 상황이 발생합니다. 패닉:

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x38 pc=0x26df]

goroutine 1 [running]:
main.getBody(0x1cdcd4, 0xf800000004, 0x1f2b44, 0x23, 0xf84005c800, ...)
        /Users/matt/Dropbox/code/go/scripts/cron/fido.go:65 +0x2bb
main.getToken(0xf84005c7e0, 0x10)
        /Users/matt/Dropbox/code/go/scripts/cron/fido.go:140 +0x156
main.main()
        /Users/matt/Dropbox/code/go/scripts/cron/fido.go:178 +0x61

오류를 잡으려고 노력했지만 원인을 파악할 수 없습니다. 프로그램은 코드에 나열된 API 서버에 액세스하지 않고 컴퓨터에서 실행되지만 적절한 오류 응답이 나타날 것으로 예상했습니다.

이 문제를 해결하는 데 도움을 주실 수 있나요?

답변 :

클라이언트.Do()에서 nil이 아닌 오류를 확인하기 전에 res.Body에 액세스하여 패닉이 발생할 가능성이 높습니다. 방법. func (*Client) Do 문서에 따르면 클라이언트 정책이나 HTTP 프로토콜 오류로 인해 발생한 경우 오류가 반환됩니다. 그러나 2xx가 아닌 응답은 오류를 일으키지 않으며 resp.Body 필드에는 여전히 nil이 아닌 값이 포함되어 있습니다.

문제를 해결하려면 client.Do()를 호출한 후 즉시 오류를 확인하세요.

res, err := client.Do(req)

if err != nil {
    return nil, err
}
defer res.Body.Close()

위 내용은 당황하세요: '잘못된 메모리 주소 또는 Nil 포인터 역참조' 오류를 디버깅하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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