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 }
Zusätzliche Tipps
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!