Heim >Backend-Entwicklung >Golang >Go Panic: Wie kann man Fehler „Ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung' beheben?
Los: Panik: Laufzeitfehler: Ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung
Frage:
Beim Ausführen eines Go-Programms stoße ich auf Folgendes Panik:
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
Obwohl ich versuche, Fehler zu erkennen, kann ich die Ursache nicht identifizieren. Das Programm läuft auf einer Maschine ohne Zugriff auf die im Code aufgeführten API-Server, aber ich habe mit einer entsprechenden Fehlermeldung gerechnet.
Können Sie mir bei der Lösung dieses Problems helfen?
Antwort :
Die Panik wird wahrscheinlich durch den Zugriff auf res.Body verursacht, bevor geprüft wird, ob in der Methode client.Do() ein Fehler ungleich Null vorliegt. Gemäß der Dokumentation für func (*Client) Do wird ein Fehler zurückgegeben, wenn dieser durch eine Client-Richtlinie oder einen HTTP-Protokollfehler verursacht wird. Eine Nicht-2xx-Antwort verursacht jedoch keinen Fehler und das Feld resp.Body enthält immer noch einen Wert ungleich Null.
Um das Problem zu beheben, überprüfen Sie den Fehler unmittelbar nach dem Aufruf von client.Do():
res, err := client.Do(req) if err != nil { return nil, err } defer res.Body.Close()
Das obige ist der detaillierte Inhalt vonGo Panic: Wie kann man Fehler „Ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung' beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!