在 Go 编程中,“运行时错误:无效内存地址或 nil 指针取消引用”当访问或取消引用无效内存时经常发生。此错误可能会在各种情况下出现,包括 HTTP 请求等网络操作。
关于您的网络爬虫,该错误可能与访问响应正文(resp.Body)有关,而无需首先检查是否有错误。例如,在 basicFetcher 函数中,如果 http.Get 返回错误,则 resp 变量将为 nil,并且后续尝试访问 resp.Body 将因 nil 指针解引用而失败。
要解决这个问题,正确处理错误至关重要。考虑修改 basicFetcher 函数,如下所示:
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 }
现在,如果 http.Get 或 ioutil.ReadAll 遇到错误,该函数将正常返回,防止 nil 指针取消引用错误。
根据twotwotwo的建议,从你的程序中返回一个(结果,错误)对是一个很好的做法。功能。这允许您处理错误并在必要时终止该函数。通过返回错误,您可以为错误提供更多上下文,并在主函数中启用更好的错误处理。
以上是如何防止 My Go Web Crawler 中出现'运行时错误:无效内存地址或 nil 指针取消引用”?的详细内容。更多信息请关注PHP中文网其他相关文章!