golang.org/x/time/rate
Gunakan pengehad kadar
golang.org/x/time/rate ialah pelajaran Go Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Go Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Go Academy merangkumi sejumlah 4 pelajaran.
Pakej rate
golang.org/x/time/rate menyediakan Limiter baldi token yang sedia untuk produksi. Ia ialah pilihan standard untuk pengehadan kadar dalam Go.
- Pelaksanaan yang telah teruji
- Kaedah Allow, Wait dan Reserve
- Mengetahui konteks
Mencipta Pengehad
rate.NewLimiter menerima kadar (token sesaat) dan saiz lonjakan. rate.Limit ialah float64 bagi peristiwa sesaat.
limiter := rate.NewLimiter(rate.Limit(10), 5)rate.Every
Jika anda berfikir dalam selang masa dan bukannya kadar sesaat, rate.Every menukarkan tempoh kepada kadar. Satu peristiwa setiap 200ms bersamaan lima per saat.
limiter := rate.NewLimiter(rate.Every(200*time.Millisecond), 1)Allow
Allow melaporkan sama ada token tersedia sekarang. Ia mengembalikan true dan menggunakan satu token, atau mengembalikan false serta-merta. Gunakannya untuk menolak permintaan berlebihan.
if !limiter.Allow() {
fmt.Println("rejected: too many requests")
return
}Wait
Wait tersekat sehingga token tersedia atau konteks dibatalkan. Ia sesuai apabila anda mahu mengatur rentak kerja dan bukannya membuangnya.
if err := limiter.Wait(ctx); err != nil {
return err
}
doWork()Reserve
Reserve mengembalikan Reservation yang menerangkan tempoh menunggu. Panggil Delay() untuk mengetahui tempoh menunggu dan Cancel() jika anda memutuskan untuk tidak meneruskan.
r := limiter.Reserve()
if !r.OK() {
return
}
time.Sleep(r.Delay())Nota: Pakej Luaran
Pakej rate bukan sebahagian daripada pustaka standard, jadi ia memerlukan go get golang.org/x/time/rate dan satu modul. Petikan kod yang mengimportnya adalah untuk ilustrasi dan tidak dijalankan secara sebaris di sini.
Analogi Pustaka Standard yang Boleh Dijalankan
Oleh sebab pakej rate adalah luaran, berikut ialah gelung pengaturan rentak daripada pustaka standard yang meniru Wait dengan berdetik setiap 200ms.
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)
}
}Melaraskan Semasa Masa Jalan
Anda boleh menukar had semasa proses berjalan dengan SetLimit dan SetBurst. Hal ini berguna apabila muat semula konfigurasi atau respons 429 daripada hulu memberitahu anda supaya memperlahankan kadar.
limiter.SetLimit(rate.Limit(20))
limiter.SetBurst(10)Pengehad Setiap Klien
Simpan peta daripada kunci klien kepada *rate.Limiter, yang dilindungi oleh mutex. Cipta pengehad pada permintaan pertama untuk kunci tersebut, kemudian gunakannya semula untuk permintaan seterusnya.
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
}Perisian Perantara HTTP
Bungkus pengendali supaya setiap permintaan memanggil Allow() terlebih dahulu. Jika hasilnya palsu, balas dengan HTTP 429 Terlalu Banyak Permintaan. Ini ialah pengehad kadar pada bahagian pelayan yang lazim digunakan.
Semakan Pantas
Uji pengetahuan Anda tentang pakej kadar.
Ringkasan
Anda telah mempelajari golang.org/x/time/rate:
- NewLimiter(rate, burst) mencipta baldi
- rate.Every menukar selang kepada kadar
- Allow menolak, Wait mengatur rentak, Reserve melaporkan kelewatan
- SetLimit dan SetBurst melaraskan tetapan semasa pelaksanaan
- Peta setiap klien serta HTTP 429 untuk pelayan
Pelajari Go dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Soalan Lazim
Adakah pelajaran “golang.org/x/time/rate” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Go Academy, termasuk “golang.org/x/time/rate”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Go Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “golang.org/x/time/rate”?
Gunakan pengehad kadar Anda berlatih Go Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Go Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Go Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “golang.org/x/time/rate” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Konsep Baldi Token
- golang.org/x/time/rate
- Pendikitan Goroutine
- Penundaan dan Percubaan Semula