import (
	"sync"
	"time"
)

/*
	限流类

limiter:=Limiter{}
// 一秒内只允许10次请求
limiter.Init(10,time.Second)

	if limit.Allow() {
		fmt.Println(i, "限流中")
	}
*/
type Limiter struct {
	sync.Mutex
	limit  int       //表示每秒允许的请求数量
	count  int       //表示当前已经处理的请求数量
	expire time.Time //表示过期时间
}

func (class *Limiter) Init(limit int, expire time.Duration) *Limiter {
	return &Limiter{
		limit:  limit,
		count:  0,
		expire: time.Now().Add(expire),
	}
}
func (class *Limiter) Allow() bool {
	class.Lock()
	defer class.Unlock()
	if class.count < class.limit {
		class.count++
		return true
	}
	//判断当前时间是否在指定时间之后
	if time.Now().After(class.expire) {
		class.count = 1
		//当前时间加上时间区间
		class.expire = time.Now().Add(time.Second)
		return true
	}
	return false
}
