golang频率rate详解
golang.org/x/time/rate 提对速度进⾏的算法
l := rate.NewLimiter(1, 3) // ⼀个参数为每秒发⽣多少次事件,第⼆个参数是最⼤可运⾏多少个事件(burst)Limter提供三中主要的函数 Allow, Reserve, Wait. ⼤部分时候使⽤WaitWait/WaitN 当没有可⽤事件时,将阻塞等待
c, _ := context.WithCancel(context.TODO())for {
l.Wait(c)
fmt.Println(time.Now().Format(\"04:05.000\"))}
输出
07:35.05507:35.05507:35.05507:36.06007:37.05907:38.059
缓存3次后,每秒执⾏⼀次
Allow/AllowN 当没有可⽤事件时,返回falsefor {
if (l.AllowN(time.Now(), 1)) {
fmt.Println(time.Now().Format(\"04:05.000\")) } else {
time.Sleep(1 * time.Second / 10)
fmt.Println(time.Now().Format(\"Second 04:05.000\")) }}
Reserve/ReserveN 当没有可⽤事件时,返回 Reservation,和要等待多久才能获得⾜够的事件
for {
r := l.ReserveN(time.Now(), 1) s := r.Delay() time.Sleep(s)
fmt.Println(s, time.Now().Format(\"04:05.000\")) }
补充:关于golang.org/x包问题
由于⾕歌被墙,跟⾕歌相关的模块⽆法通过go get来下载
解决⽅法:
ln -s $GOPATH/src/github.com/golang $GOPATH/src/golang.org/x
如果是Windows下,最后⼀条可以替换为mklink命令,或者直接拷贝⽂件夹修改⼀下名称即可。go的官⽅包都在这个⽬录下:
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。