我需要对 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 吗?