Alamat Memori Tidak Sah atau Ralat Penolak Rujukan Penunjuk Nil: Menyelesaikan Masalah untuk Perayap Web dalam Go
Apabila menghadapi "ralat masa jalan: alamat memori tidak sah atau nil pointer dereference" ralat dalam Go, adalah penting untuk menentukan di mana isu itu terletak. Mari kita mendalami senario biasa yang dihadapi oleh pemula perangkak web.
Kod yang disediakan menggunakan dua fungsi untuk merangkak web, advancedFetcher dan basicFetcher. Kedua-dua fungsi membuat permintaan HTTP menggunakan utiliti makeGetRequest. Walau bagaimanapun, mereka boleh mencetuskan ralat yang dinyatakan di atas dalam keadaan tertentu.
Memahami Masalah
Pakar menyarankan agar berhati-hati memeriksa ralat di seluruh kod. Selepas melaksanakan amalan ini, anda mungkin masih menghadapi ralat yang sama. Mari kita periksa perkara yang berlaku lebih dekat.
Dalam fungsi basicFetcher, ioutil.ReadAll(resp.Body) digunakan selepas permintaan dibuat. Jika permintaan gagal (iaitu, err != nil), kandungan masih dibaca, yang boleh membawa kepada ralat yang dipersoalkan kerana resp.Body mungkin tiada dalam situasi ini.
Menyelesaikan Isu
Untuk menangani masalah ini, pertimbangkan untuk mengubah suai fungsi basicFetcher untuk mengembalikan tupel (hasil, ralat). Ini membolehkan penamatan yang anggun sekiranya berlaku ralat. Berikut ialah contoh semakan:
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 }
Petua Tambahan
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Alamat Memori Tidak Sah atau Penolakan Penunjuk Nil' dalam Go Web Crawlers?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!