Heim > Backend-Entwicklung > Golang > Wie behebe ich den Fehler „Ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung' in Go Web Crawlern?

Wie behebe ich den Fehler „Ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung' in Go Web Crawlern?

Susan Sarandon
Freigeben: 2024-12-04 18:25:16
Original
1034 Leute haben es durchsucht

How to Troubleshoot

Ungültige Speicheradresse oder Null-Zeiger-Dereferenzierungsfehler: Fehlerbehebung für Webcrawler in Go

Beim Auftreten des „Laufzeitfehlers: ungültige Speicheradresse oder Wenn in Go der Fehler „Null-Zeiger-Dereferenzierung“ auftritt, ist es wichtig, herauszufinden, wo das Problem liegt. Schauen wir uns ein häufiges Szenario an, mit dem Webcrawler-Neulinge konfrontiert sind.

Der bereitgestellte Code verwendet zwei Funktionen für das Webcrawlen: advancedFetcher und basicFetcher. Beide Funktionen stellen HTTP-Anfragen mithilfe des Dienstprogramms makeGetRequest. Unter bestimmten Umständen können sie jedoch den oben genannten Fehler auslösen.

Das Problem verstehen

Experten empfehlen, den gesamten Code sorgfältig auf Fehler zu überprüfen. Bei der Implementierung dieser Vorgehensweise tritt möglicherweise immer noch derselbe Fehler auf. Sehen wir uns genauer an, was passiert.

In der basicFetcher-Funktion wird ioutil.ReadAll(resp.Body) aufgerufen, nachdem die Anfrage gestellt wurde. Wenn die Anfrage fehlschlägt (d. h. err != nil), wird der Body trotzdem gelesen, was zu dem betreffenden Fehler führen kann, da resp.Body in dieser Situation möglicherweise nil ist.

Lösung des Problems

Um dieses Problem zu beheben, sollten Sie die Funktion „basicFetcher“ ändern, um ein (Ergebnis, Fehler)-Tupel zurückzugeben. Dies ermöglicht eine ordnungsgemäße Beendigung im Fehlerfall. Hier ist eine Beispielüberarbeitung:

func basicFetcher(uri string, c chan int) (int, error) {
    fmt.Println("Getting: ", uri)
    resp, err := http.Get(uri)
    if err != nil {
        return 0, err
    }
    defer resp.Body.Close()
    _, err = ioutil.ReadAll(resp.Body)
    if err != nil {
        return 0, err
    }
    return resp.StatusCode, nil
}
Nach dem Login kopieren

Zusätzliche Tipps

  • Auf Fehler prüfen: Überprüfen Sie insbesondere jeden Schritt sorgfältig auf Fehler beim Abrufen und Lesen von Antworten.
  • Verwenden Sie Idiomatisch Go: Wenden Sie idiomatische Go-Praktiken an, z. B. die Rückgabe von Fehlertupeln, um potenzielle Fehler elegant zu behandeln.
  • Behandeln Sie erwartete Fehler: Antizipieren und behandeln Sie bestimmte Fehler, die beim Web-Crawling auftreten können, z B. HTTP-Fehler oder Verbindungszeitüberschreitungen.

Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „Ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung' in Go Web Crawlern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage