GoDasturchi
Thread-Safe REST API

Thread-Safe REST API

Thread-xavfsiz REST API

Haqiqiy HTTP serverda bir vaqtning o'zida ko'plab so'rovlar turli goroutinalarda qayta ishlanadi — Go'ning net/http serveri har bir so'rov uchun avtomatik yangi goroutina ochadi. Agar handler'ingiz umumiy holatni (masalan, hisoblagich yoki map) o'zgartirsa, Concurrency Fundamentals kursidagi Mutex naqshi shu yerda ham zarur.

example.go
type Counter struct {
    mu    sync.Mutex
    count int
}

func (c *Counter) Handler(w http.ResponseWriter, r *http.Request) {
    c.mu.Lock()
    c.count++
    current := c.count
    c.mu.Unlock()
    fmt.Fprintf(w, "%d", current)
}

Bu — Concurrency Safety darsidagi SafeRateLimiterning aynan bir xil naqshi, endi HTTP handler shaklida: struct o'z holatini (count) sync.Mutex bilan himoyalaydi, va bu himoya HTTP so'rovlar qanchalik parallel kelishidan qat'i nazar ishlaydi.

>_ Exercise

mu sync.Mutex va count int maydonlariga ega Counter struct'ini yozing. Handler(w http.ResponseWriter, r *http.Request) metodini yozing — u qulf ostida countni bittaga oshiradi va yangi qiymatni javobga yozadi. mainda 100 ta goroutina orqali bir vaqtda Handlerga so'rov yuboring (har biri httptest.NewRequest/NewRecorder bilan), barchasi tugashini kuting, so'ngra yakuniy countni chop eting.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

HTTP handler'lar bir vaqtda ko'plab goroutinalarda chaqirilishi mumkin, shuning uchun ular umumiy holatni Concurrency Fundamentals kursidagi Mutex naqshi bilan himoyalashi kerak. Bu — real production API'larning ajralmas qismi.

NEXT UP

HTTP Middleware Pattern

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Thread-Safe REST API

Thread-xavfsiz REST API

Haqiqiy HTTP serverda bir vaqtning o'zida ko'plab so'rovlar turli goroutinalarda qayta ishlanadi — Go'ning net/http serveri har bir so'rov uchun avtomatik yangi goroutina ochadi. Agar handler'ingiz umumiy holatni (masalan, hisoblagich yoki map) o'zgartirsa, Concurrency Fundamentals kursidagi Mutex naqshi shu yerda ham zarur.

example.go
type Counter struct {
    mu    sync.Mutex
    count int
}

func (c *Counter) Handler(w http.ResponseWriter, r *http.Request) {
    c.mu.Lock()
    c.count++
    current := c.count
    c.mu.Unlock()
    fmt.Fprintf(w, "%d", current)
}

Bu — Concurrency Safety darsidagi SafeRateLimiterning aynan bir xil naqshi, endi HTTP handler shaklida: struct o'z holatini (count) sync.Mutex bilan himoyalaydi, va bu himoya HTTP so'rovlar qanchalik parallel kelishidan qat'i nazar ishlaydi.

>_ Exercise

mu sync.Mutex va count int maydonlariga ega Counter struct'ini yozing. Handler(w http.ResponseWriter, r *http.Request) metodini yozing — u qulf ostida countni bittaga oshiradi va yangi qiymatni javobga yozadi. mainda 100 ta goroutina orqali bir vaqtda Handlerga so'rov yuboring (har biri httptest.NewRequest/NewRecorder bilan), barchasi tugashini kuting, so'ngra yakuniy countni chop eting.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

HTTP handler'lar bir vaqtda ko'plab goroutinalarda chaqirilishi mumkin, shuning uchun ular umumiy holatni Concurrency Fundamentals kursidagi Mutex naqshi bilan himoyalashi kerak. Bu — real production API'larning ajralmas qismi.

NEXT UP

HTTP Middleware Pattern