13.go内置的rate包学习1

package main

import (
    "context"
    "fmt"
    "golang.org/x/time/rate"
    "log"
    "time"
)

func main() {
    r := rate.NewLimiter(1, 5) //1表示每次放进筒内的数量,桶内的令牌数是5,最大令牌数也是5,这个筒子是自动补充的,你只要取了令牌不管你取多少个,这里都会在每次取完后自动加1个进来,因为我们设置的是1
    ctx := context.Background()

    for {
        err := r.WaitN(ctx, 2)//每次消耗2个,放入一个,消耗完了还会放进去,因为初始是5个,所以这段代码再执行到第4次的时候筒里面就空了,如果当前不够取两个了,本次就不取,再放一个进去,然后返回false
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(time.Now().Format("2016-01-02 15:04:05"))
        time.Sleep(time.Second)
    }

}




posted @ 2019-12-22 22:34  离地最远的星  阅读(494)  评论(0编辑  收藏  举报