开源项目 ulule/limiter
使用教程
limiterDead simple rate limit middleware for Go.项目地址:https://gitcode.com/gh_mirrors/li/limiter
1. 项目的目录结构及介绍
ulule/limiter
├── examples
│ ├── basic.go
│ ├── context.go
│ ├── fasthttp.go
│ ├── gin.go
│ ├── gorilla.go
│ ├── http.go
│ ├── iris.go
│ ├── negroni.go
│ └── echo.go
├── limiter
│ ├── limiter.go
│ ├── middleware.go
│ ├── store.go
│ ├── store_memory.go
│ ├── store_redis.go
│ └── store_redis_cluster.go
├── README.md
└── go.mod
- examples: 包含各种框架的示例代码,如
gin
,echo
,fasthttp
等。 - limiter: 核心代码目录,包含限流器的实现和中间件。
limiter.go
: 限流器的主要逻辑。middleware.go
: 中间件的实现。store.go
: 存储接口定义。store_memory.go
: 内存存储实现。store_redis.go
: Redis 存储实现。store_redis_cluster.go
: Redis 集群存储实现。
- README.md: 项目说明文档。
- go.mod: Go 模块文件。
2. 项目的启动文件介绍
项目的启动文件通常位于 examples
目录下,根据使用的框架不同,选择相应的示例文件。例如,使用 gin
框架时,启动文件为 examples/gin.go
。
package main
import (
"time"
"github.com/gin-gonic/gin"
"github.com/ulule/limiter/v3"
"github.com/ulule/limiter/v3/drivers/middleware/gin"
"github.com/ulule/limiter/v3/drivers/store/memory"
)
func main() {
router := gin.Default()
// 创建限流器
rate := limiter.Rate{
Period: 1 * time.Minute,
Limit: 100,
}
store := memory.NewStore()
instance := limiter.New(store, rate)
// 添加中间件
router.Use(limiter.NewMiddleware(instance))
router.GET("/", func(c *gin.Context) {
c.String(200, "Hello, World!")
})
router.Run(":8080")
}
3. 项目的配置文件介绍
项目本身没有独立的配置文件,配置主要通过代码进行。例如,在 examples/gin.go
中,限流器的配置如下:
rate := limiter.Rate{
Period: 1 * time.Minute,
Limit: 100,
}
store := memory.NewStore()
instance := limiter.New(store, rate)
Period
: 限流周期,这里是 1 分钟。Limit
: 周期内的请求限制,这里是 100 次。store
: 存储后端,这里是内存存储。
通过这些配置,可以灵活地调整限流器的参数以适应不同的需求。
limiterDead simple rate limit middleware for Go.项目地址:https://gitcode.com/gh_mirrors/li/limiter