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 goroutine 2 [syscall]: created by runtime.main /usr/local/Cellar/go/1.0.3/src/pkg/runtime/proc.c:221 goroutine 3 [syscall]: syscall.Syscall6() /usr/local/Cellar/go/1.0.3/src/pkg/syscall/asm_darwin_amd64.s:38 +0x5 syscall.kevent(0x6, 0x0, 0x0, 0xf840085188, 0xa, ...) /usr/local/Cellar/go/1.0.3/src/pkg/syscall/zsyscall_darwin_amd64.go:199 +0x88 syscall.Kevent(0xf800000006, 0x0, 0x0, 0xf840085188, 0xa0000000a, ...) /usr/local/Cellar/go/1.0.3/src/pkg/syscall/syscall_bsd.go:546 +0xa4 net.(*pollster).WaitFD(0xf840085180, 0xf840059040, 0x0, 0x0, 0x0, ...) /usr/local/Cellar/go/1.0.3/src/pkg/net/fd_darwin.go:96 +0x185 net.(*pollServer).Run(0xf840059040, 0x0) /usr/local/Cellar/go/1.0.3/src/pkg/net/fd.go:236 +0xe4 created by net.newPollServer /usr/local/Cellar/go/1.0.3/src/pkg/net/newpollserver.go:35 +0x382
패닉: 런타임 오류: 잘못된 메모리 주소 또는 nil 포인터 역참조는 리소스에 메모리 주소가 부족할 때 발생하며, 이를 nil 포인터 역참조라고 합니다. 이는 일반적으로 아무것도 가리키는 포인터를 사용하려고 하거나 nil 포인터의 필드에 액세스할 때 발생합니다.
이 문제를 해결하려면:
주어진 코드에서 닫기를 시도할 때 getBody 함수에서 패닉이 발생했습니다. 입술.바디. func (*Client) Do 문서에 따르면 오류는 클라이언트 정책이나 HTTP 프로토콜 오류로 인해 발생한 경우에만 반환되며 성공적인 응답에는 항상 nil이 아닌 본문이 포함됩니다.
권장되는 수정 사항은 다음과 같습니다. :
res, err := client.Do(req) if err != nil { return nil, err } defer res.Body.Close()
res.Body를 사용하기 전에 오류를 확인하면 요청 중에 발생할 수 있는 오류를 우아하게 처리하고 오류를 피할 수 있습니다. 패닉.
위 내용은 Go 코드에서 '패닉: 런타임 오류: 잘못된 메모리 주소 또는 nil 포인터 역참조' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!