Heim >Backend-Entwicklung >Golang >Go HTTP Client: Wie vermeide ich „Panik: Laufzeitfehler: ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung'?

Go HTTP Client: Wie vermeide ich „Panik: Laufzeitfehler: ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung'?

DDD
DDDOriginal
2024-12-26 19:50:09877Durchsuche

Go HTTP Client: How to Avoid

Go: Panik: Laufzeitfehler: ungültige Speicheradresse oder Nullzeiger-Dereferenzierung

Beim Ausführen eines Go-Programms kann es aufgrund von zu einer Panik kommen eine ungültige Speicheradresse oder eine Null-Zeiger-Dereferenzierung. Diese Fehlermeldung weist häufig eher auf ein Laufzeitproblem als auf einen bestimmten Programmfehler hin.

In diesem Fall zeigt der bereitgestellte Go-Code potenzielle Probleme bei der HTTP-Client-Verarbeitung.

Das Problem

Der Code verwendet die Methode func (*Client) Do, um HTTP-Anfragen zu stellen. Es wird jedoch nicht geprüft, ob vom Client zurückgegebene Fehler vorliegen, bevor versucht wird, auf den Antworttext zuzugreifen.

Die Lösung

Laut der Dokumentation für func (*Client) Tun Sie dies auch dann, wenn ein Nicht-2xx-HTTP-Statuscode empfangen wird, führt dies nicht zu einem Fehler. Stattdessen wird der Fehler nur zurückgegeben, wenn er durch eine Client-Richtlinie oder einen HTTP-Protokollfehler verursacht wird.

Der Code prüft jedoch nach dem Zugriff auf den Antworttext (res.Body) auf Fehler. Dies kann dazu führen, dass aufgrund einer ungültigen Speicheradresse oder einer Null-Zeiger-Dereferenzierung ein Fehler ausgegeben wird.

Um dieses Problem zu beheben, sollte der Code so geändert werden, dass vor dem Zugriff auf den Antworttext nach Fehlern gesucht wird, etwa so:

res, err := client.Do(req)

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

Das obige ist der detaillierte Inhalt vonGo HTTP Client: Wie vermeide ich „Panik: Laufzeitfehler: ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung'?. 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