package runtime 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() // before request defer release() // after request c.Next() } }