alist/server/middlewares/limit.go

17 lines
280 B
Go
Raw Normal View History

package middlewares
import (
"github.com/gin-gonic/gin"
)
func MaxAllowed(n int) gin.HandlerFunc {
sem := make(chan struct{}, n)
acquire := func() { sem <- struct{}{} }
release := func() { <-sem }
return func(c *gin.Context) {
acquire()
defer release()
c.Next()
}
}