Allow or Deny
Ruxsat yoki rad etish
Endi butun loyihaning markaziy savoliga javob berish vaqti keldi: berilgan mijozga so'rovni davom ettirishga ruxsat berilsinmi? Bu — Methods on the Limiter darsidagi Count bilan The Rate Limiter darsidagi limitni birlashtiradi.
func (l *RateLimiter) Allow(id string) bool {
if l.counts[id] >= l.limit {
return false
}
l.counts[id]++
return true
}Muhim nozik nuqta: tekshirish (>= l.limit) va oshirish (counts[id]++) bitta metod chaqiruvi ichida, ketma-ket sodir bo'ladi. Agar limitga yetgan bo'lsangiz, hisoblagich boshqa oshirilmaydi — bu ortiqcha sarflanmagan tokenni saqlab qolish emas, balki mijoz limitidan chetga chiqmasligini kafolatlaydi.
>_ Exercise
RateLimiter uchun Allow(id string) bool metodini yozing. Agar mijozning joriy soni limitga yetgan yoki undan oshgan bo'lsa, false qaytaring (hisoblagichni oshirmasdan). Aks holda hisoblagichni bittaga oshirib, true qaytaring.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Allow — "tekshir-va-amalga oshir" mantig'ining klassik namunasi: tekshirish va o'zgartirish bitta metod chaqiruvi ichida, bo'linmagan holda sodir bo'ladi. Bu rate limiter'ning butun ishini bitta, aniq nomlangan metodga jamlaydi.
NEXT UP
Concurrency Safety
$ go run main.go
Kodingizni ishga tushiring