Heim >Backend-Entwicklung >Golang >Go Panic: Wie kann man Fehler „Ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung' beheben?

Go Panic: Wie kann man Fehler „Ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung' beheben?

Linda Hamilton
Linda HamiltonOriginal
2024-12-21 04:45:10698Durchsuche

Go Panic: How to Debug

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn