feat(完整功能): 以Apache License 2.0协议开源

This commit is contained in:
2025-09-23 20:57:54 +08:00
parent 4eb48f22f7
commit 2fccf28df9
7 changed files with 510 additions and 2 deletions

68
example_test.go Normal file
View File

@@ -0,0 +1,68 @@
// Copyright 2025 肖其顿
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package limit_test
import (
"fmt"
"time"
"github.com/xiaoqidun/limit"
"golang.org/x/time/rate"
)
// ExampleLimiter 演示了 limit 包的基本用法。
func ExampleLimiter() {
// 创建一个使用默认配置的 Limiter 实例
limiter := limit.New()
// 程序退出前,优雅地停止后台任务,这非常重要
defer limiter.Stop()
// 为一个特定的测试键获取一个速率限制器
// 限制为每秒2个请求最多允许3个并发桶容量
testKey := "testKey"
rateLimiter := limiter.Get(testKey, rate.Limit(2), 3)
// 模拟连续的请求
for i := 0; i < 5; i++ {
if rateLimiter.Allow() {
fmt.Printf("请求 %d: 已允许\n", i+1)
} else {
fmt.Printf("请求 %d: 已拒绝\n", i+1)
}
time.Sleep(100 * time.Millisecond)
}
// 手动移除一个不再需要的限制器
limiter.Del(testKey)
// Output:
// 请求 1: 已允许
// 请求 2: 已允许
// 请求 3: 已允许
// 请求 4: 已拒绝
// 请求 5: 已拒绝
}
// ExampleNewWithConfig 展示了如何使用自定义配置。
func ExampleNewWithConfig() {
// 自定义配置
config := limit.Config{
ShardCount: 64, // 分片数量必须是2的幂
GCInterval: 5 * time.Minute, // GC 检查周期
Expiration: 15 * time.Minute, // 限制器过期时间
}
// 使用自定义配置创建一个 Limiter 实例
customLimiter := limit.NewWithConfig(config)
defer customLimiter.Stop()
fmt.Println("使用自定义配置的限制器已成功创建")
// Output:
// 使用自定义配置的限制器已成功创建
}