The Rate Limiter
Rate limiter
Endi barcha qismlar tayyor: mijozlarni tozalash (Input Cleanup), tekshirish (Request Gatekeeper), sanash (Counting Requests) va ko'rsatish (Formatting Results). Vaqt keldi — buларni bitta markaziy struct'ga jamlash: `RateLimiter`. U Counting Requests darsidagi hisoblagich g'oyasini oladi va unga limit tushunchasini qo'shadi.
type RateLimiter struct {
limit int
counts map[string]int
}
func NewRateLimiter(limit int) *RateLimiter {
return &RateLimiter{limit: limit, counts: make(map[string]int)}
}limit — har bir mijoz uchun ruxsat etilgan maksimal so'rovlar soni. Hozircha struct faqat ma'lumotni saqlaydi — keyingi ikki darsda unga xatti-harakat (metodlar) qo'shasiz.
>_ Exercise
limit int va counts map[string]int maydonlariga ega RateLimiter struct'ini yozing. NewRateLimiter(limit int) *RateLimiter konstruktorini yozing — u berilgan limit bilan, ichki map'i ishga tushirilgan RateLimiter qaytaradi.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
RateLimiter struct'i ilgari alohida-alohida ko'rgan ikkita g'oyani birlashtiradi: mijoz bo'yicha hisoblagich (map[string]int) va sobit chegara (limit). Konstruktor ikkalasini ham to'g'ri boshlang'ich holatda tayyorlaydi.
NEXT UP
Methods on the Limiter
$ go run main.go
Kodingizni ishga tushiring