Heim >Backend-Entwicklung >Golang >Warum erhalte ich in meinem Go-Code den Fehler „Panik: Laufzeitfehler: ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung'?
Beim Aufruf von Go kommt es explizit zu einer Panik mit der folgenden Meldung :
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
Die Panik: Laufzeitfehler: Ungültige Speicheradresse oder Nullzeiger-Dereferenzierung tritt auf, wenn einer Ressource eine Speicheradresse fehlt, was als Nullzeiger-Dereferenzierung bezeichnet wird. Dies geschieht normalerweise, wenn Sie versuchen, einen Zeiger zu verwenden, der auf nichts zeigt, oder wenn Sie auf ein Feld mit einem Nullzeiger zugreifen.
So beheben Sie dieses Problem:
Im angegebenen Code trat die Panik in der getBody-Funktion auf, als versucht wurde, die zu schließen res.Körper. Gemäß den Dokumenten für func (*Client) Do wird ein Fehler nur zurückgegeben, wenn er durch eine Client-Richtlinie oder einen HTTP-Protokollfehler verursacht wird, und erfolgreiche Antworten enthalten immer einen Körper ungleich Null.
Die vorgeschlagene Änderung ist :
res, err := client.Do(req) if err != nil { return nil, err } defer res.Body.Close()
Indem Sie vor der Verwendung von res.Body nach dem Fehler suchen, können Sie alle Fehler, die während der Anfrage aufgetreten sein könnten, ordnungsgemäß behandeln und vermeiden Panik.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in meinem Go-Code den Fehler „Panik: Laufzeitfehler: ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!