0Pricing
Go Academy · Pelajaran

golang.org/x/time/rate

Gunakan pembatas laju

golang.org/x/time/rate adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Paket rate

golang.org/x/time/rate menyediakan Limiter ember token yang siap digunakan dalam produksi. Paket ini merupakan pilihan standar untuk pembatasan laju di Go.

  • Implementasi yang telah teruji di lapangan
  • Metode Allow, Wait, dan Reserve
  • Mendukung konteks

Membuat Pembatas

rate.NewLimiter menerima laju (token per detik) dan ukuran lonjakan. rate.Limit adalah nilai float64 yang menyatakan kejadian per detik.

limiter := rate.NewLimiter(rate.Limit(10), 5)

rate.Every

Jika Anda berpikir dalam interval, bukan laju per detik, rate.Every mengubah durasi menjadi laju. Satu kejadian setiap 200 md sama dengan lima kejadian per detik.

limiter := rate.NewLimiter(rate.Every(200*time.Millisecond), 1)

Allow

Allow melaporkan apakah token tersedia saat ini. Fungsi ini mengembalikan true dan menggunakan satu token, atau segera mengembalikan false. Gunakan fungsi ini untuk menolak permintaan berlebih.

if !limiter.Allow() {
    fmt.Println("rejected: too many requests")
    return
}

Wait

Wait memblokir sampai token tersedia atau konteks dibatalkan. Fungsi ini ideal ketika Anda ingin mengatur laju pekerjaan, bukan membuangnya.

if err := limiter.Wait(ctx); err != nil {
    return err
}
doWork()

Reserve

Reserve mengembalikan Reservation yang menjelaskan berapa lama harus menunggu. Panggil Delay() untuk mengetahui waktu tunggu, dan Cancel() jika Anda memutuskan untuk tidak melanjutkan.

r := limiter.Reserve()
if !r.OK() {
    return
}
time.Sleep(r.Delay())

Catatan: Paket Eksternal

Paket rate tidak termasuk dalam pustaka standar, sehingga memerlukan go get golang.org/x/time/rate dan sebuah modul. Cuplikan yang mengimpornya bersifat ilustratif dan tidak dijalankan langsung di sini.

Padanan Pustaka Standar yang Dapat Dijalankan

Since paket rate bersifat eksternal, berikut perulangan pengatur laju dari pustaka standar yang meniru Wait dengan berdetak setiap 200 md.

package main

import (
    "fmt"
    "time"
)

func main() {
    tick := time.NewTicker(200 * time.Millisecond)
    defer tick.Stop()
    for i := 0; i < 4; i++ {
        <-tick.C
        fmt.Println("processed event", i)
    }
}

Menyesuaikan Saat Berjalan

Anda dapat mengubah batas secara langsung dengan SetLimit dan SetBurst. Ini berguna ketika pemuatan ulang konfigurasi atau respons 429 dari layanan hulu memberi tahu Anda untuk memperlambat laju.

limiter.SetLimit(rate.Limit(20))
limiter.SetBurst(10)

Pembatas Per Klien

Simpan pemetaan dari kunci klien ke *rate.Limiter, yang dilindungi mutex. Buat pembatas saat permintaan pertama untuk kunci tersebut, lalu gunakan kembali pembatas itu untuk permintaan berikutnya.

func getLimiter(m map[string]*rate.Limiter, key string) *rate.Limiter {
    if l, ok := m[key]; ok {
        return l
    }
    l := rate.NewLimiter(rate.Limit(5), 10)
    m[key] = l
    return l
}

Middleware HTTP

Bungkus penangan agar setiap permintaan memanggil Allow() terlebih dahulu. Jika hasilnya false, kirim respons HTTP 429 Too Many Requests. Inilah pembatasan laju sisi server yang umum digunakan.

Pemeriksaan Singkat

Uji pemahaman Anda tentang paket pembatasan laju.

Ringkasan

Anda telah mempelajari golang.org/x/time/rate:

  • NewLimiter(rate, burst) membuat bucket
  • rate.Every mengubah interval menjadi laju
  • Allow menolak, Wait mengatur tempo, dan Reserve melaporkan penundaan
  • SetLimit dan SetBurst menyesuaikan pengaturan saat program berjalan
  • Pemetaan per klien ditambah HTTP 429 untuk server

Pertanyaan yang Sering Diajukan

Apakah pelajaran “golang.org/x/time/rate” gratis?

Ya — teks lengkap “golang.org/x/time/rate” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “golang.org/x/time/rate”?

Gunakan pembatas laju Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “golang.org/x/time/rate” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Konsep Token Bucket
  2. golang.org/x/time/rate
  3. Throttling Goroutine
  4. Backoff dan Percobaan Ulang
← Kembali ke Go Academy