【发布时间】:2021-12-20 07:08:38
【问题描述】:
我需要对 API 的请求进行速率限制,我正在考虑为此使用本机 golang.org/x/time/rate 包。为了稍微摆弄一下它的 API 并确保我的假设是正确的,我创建了这个测试,但我似乎在这里遗漏了一些东西:
package main
import (
"github.com/stretchr/testify/require"
"golang.org/x/time/rate"
"sync"
"testing"
)
func TestLimiter(t *testing.T) {
limiter := rate.NewLimiter(rate.Limit(5),1)
wg := sync.WaitGroup{}
successful := 0
for i:=1; i<=10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
if limiter.Allow() {
successful++
}
}()
}
wg.Wait()
require.Equal(t, 5, successful)
// This test fails with
// Expected :5
// Actual :1
}
谁能解释一下这是为什么?限速器不应该允许 5 req/s 吗?
【问题讨论】:
标签: go rate-limiting rate ratelimit