잘못된 메모리 주소 또는 Nil 포인터 역참조 오류: Go의 웹 크롤러 문제 해결
"런타임 오류: 잘못된 메모리 주소 또는 Go에서 nil 포인터 역참조' 오류가 발생하면 문제가 어디에 있는지 파악하는 것이 중요합니다. 웹 크롤러 초보자가 직면하는 일반적인 시나리오를 살펴보겠습니다.
제공된 코드는 웹 크롤링을 위한 두 가지 기능인 AdvancedFetcher와 basicFetcher를 사용합니다. 두 함수 모두 makeGetRequest 유틸리티를 사용하여 HTTP 요청을 만듭니다. 그러나 특정 상황에서는 앞서 언급한 오류가 발생할 수 있습니다.
문제 이해
전문가들은 코드 전체에서 오류를 부지런히 검사할 것을 제안합니다. 이 방법을 구현해도 여전히 동일한 오류가 발생할 수 있습니다. 무슨 일이 일어나고 있는지 자세히 살펴보겠습니다.
basicFetcher 함수에서는 요청이 이루어진 후 ioutil.ReadAll(resp.Body)가 호출됩니다. 요청이 실패하더라도(예: err != nil) 본문은 여전히 읽히는데, 이 상황에서는 resp.Body가 nil일 수 있으므로 문제의 오류가 발생할 수 있습니다.
문제 해결
이 문제를 해결하려면 (결과, 오류) 튜플을 반환하도록 basicFetcher 함수를 수정하는 것이 좋습니다. 이를 통해 오류 발생 시 정상적으로 종료할 수 있습니다. 개정 예시는 다음과 같습니다.
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 }
추가 팁
위 내용은 Go 웹 크롤러에서 '잘못된 메모리 주소 또는 Nil 포인터 역참조' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!