GoDasturchi
Tracking Visited URLs

Tracking Visited URLs

Ko'rilgan URL'larni kuzatish

Page Fetching darsidagi namunaviy saytga qarang: laptops sahifasi Homega qaytadigan havolaga ega — bu sikl hosil qiladi (DNS Resolver kursidagi Cycle Detection darsini eslang). Agar crawler bu sikldan xabarsiz bo'lsa, u bir xil sahifalarni abadiy qayta-qayta kezaveradi.

Yechim — Go Generics kursidagi Uniquega o'xshash ko'rilgan URL'lar to'plami: har bir URL'ni bir marta qayta ishlaymiz, ikkinchi marta uchraganda esa o'tkazib yuboramiz.

example.go
type VisitedSet struct {
    seen map[string]bool
}

func (v *VisitedSet) MarkVisited(url string) bool {
    if v.seen[url] {
        return false  // allaqachon ko'rilgan
    }
    v.seen[url] = true
    return true  // yangi, endi ko'rildi
}

MarkVisited ikkita ishni birdaniga qiladi: tekshiradi va belgilaydi, bitta metodda — bu Project: Rate Limiter kursidagi "tekshir-va-amalga oshir" naqshining aynan o'zi. Qaytadigan bool — "bu URL bilan davom etish kerakmi?" degan savolga to'g'ridan-to'g'ri javob.

>_ Exercise

seen map[string]bool maydonli VisitedSet struct'ini va NewVisitedSet() *VisitedSet konstruktorini yozing. MarkVisited(url string) bool metodini yozing — agar URL allaqachon ko'rilgan bo'lsa false qaytaradi; aks holda uni ko'rilgan deb belgilab true qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Ko'rilgan URL'lar to'plami crawler'ni cheksiz sikllardan (bir-biriga qaytadigan havolalar) himoya qiladi. MarkVisited tekshirish va belgilashni bitta atomik qadamga birlashtiradi — bu keyingi darsda concurrent crawler yozganda hal qiluvchi ahamiyatga ega bo'ladi.

NEXT UP

Concurrent Crawl with Worker Pool

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Tracking Visited URLs

Ko'rilgan URL'larni kuzatish

Page Fetching darsidagi namunaviy saytga qarang: laptops sahifasi Homega qaytadigan havolaga ega — bu sikl hosil qiladi (DNS Resolver kursidagi Cycle Detection darsini eslang). Agar crawler bu sikldan xabarsiz bo'lsa, u bir xil sahifalarni abadiy qayta-qayta kezaveradi.

Yechim — Go Generics kursidagi Uniquega o'xshash ko'rilgan URL'lar to'plami: har bir URL'ni bir marta qayta ishlaymiz, ikkinchi marta uchraganda esa o'tkazib yuboramiz.

example.go
type VisitedSet struct {
    seen map[string]bool
}

func (v *VisitedSet) MarkVisited(url string) bool {
    if v.seen[url] {
        return false  // allaqachon ko'rilgan
    }
    v.seen[url] = true
    return true  // yangi, endi ko'rildi
}

MarkVisited ikkita ishni birdaniga qiladi: tekshiradi va belgilaydi, bitta metodda — bu Project: Rate Limiter kursidagi "tekshir-va-amalga oshir" naqshining aynan o'zi. Qaytadigan bool — "bu URL bilan davom etish kerakmi?" degan savolga to'g'ridan-to'g'ri javob.

>_ Exercise

seen map[string]bool maydonli VisitedSet struct'ini va NewVisitedSet() *VisitedSet konstruktorini yozing. MarkVisited(url string) bool metodini yozing — agar URL allaqachon ko'rilgan bo'lsa false qaytaradi; aks holda uni ko'rilgan deb belgilab true qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Ko'rilgan URL'lar to'plami crawler'ni cheksiz sikllardan (bir-biriga qaytadigan havolalar) himoya qiladi. MarkVisited tekshirish va belgilashni bitta atomik qadamga birlashtiradi — bu keyingi darsda concurrent crawler yozganda hal qiluvchi ahamiyatga ega bo'ladi.

NEXT UP

Concurrent Crawl with Worker Pool