Bei der Go-Programmierung tritt der „Laufzeitfehler: ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung“ auf Tritt häufig auf, wenn auf ungültigen Speicher zugegriffen oder dieser dereferenziert wird. Dieser Fehler kann in verschiedenen Kontexten auftreten, einschließlich Netzwerkvorgängen wie HTTP-Anfragen.
Bei Ihrem Webcrawler hängt der Fehler wahrscheinlich mit dem Zugriff auf den Antworttext (bzw. Body) zusammen zunächst auf Fehler prüfen. Wenn in der basicFetcher-Funktion beispielsweise http.Get einen Fehler zurückgibt, ist die resp-Variable null und nachfolgende Versuche, auf resp.Body zuzugreifen, schlagen aufgrund der Null-Zeiger-Dereferenzierung fehl.
Um dieses Problem zu beheben, ist es wichtig, Fehler angemessen zu behandeln. Erwägen Sie, Ihre basicFetcher-Funktion wie folgt zu ändern:
func basicFetcher(uri string, c chan int) { resp, err := http.Get(uri) if err != nil { fmt.Println(err) return } defer resp.Body.Close() _, err = ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) return } c <- resp.StatusCode }
Wenn nun http.Get oder ioutil.ReadAll auf einen Fehler stößt, kehrt die Funktion ordnungsgemäß zurück und verhindert so den Nullzeiger-Dereferenzierungsfehler.
Wie von twotwotwo vorgeschlagen, ist es eine gute Praxis, ein (Ergebnis-, Fehler-)Paar zurückzugeben aus Ihren Funktionen. Dadurch können Sie Fehler behandeln und die Funktion bei Bedarf beenden. Durch die Rückgabe eines Fehlers können Sie mehr Kontext für den Fehler bereitstellen und eine bessere Fehlerbehandlung in Ihrer Hauptfunktion ermöglichen.
Das obige ist der detaillierte Inhalt vonWie kann ich „Laufzeitfehler: ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung' in My Go Web Crawler verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!