golang.org/x/time/rate 提对速度进行限制的算法
l := rate.NewLimiter(1, 3) // 一个参数为每秒发生多少次事件,第二个参数是最大可运行多少个事件(burst)
Limter提供三中主要的函数 Allow, Reserve, Wait. 大部分时候使用Wait
Wait/WaitN 当没有可用事件时,将阻塞等待
c, _ := context.WithCancel(context.TODO()) for { l.Wait(c) fmt.Println(time.Now().Format("04:05.000")) }
输出
07:35.055 07:35.055 07:35.055 07:36.060 07:37.059 07:38.059
缓存3次后,每秒执行一次
Allow/AllowN 当没有可用事件时,返回false for { 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来下载
解决方法:
git clone https://github.com/golang/net.git $GOPATH/src/github.com/golang/net
git clone https://github.com/golang/sys.git $GOPATH/src/github.com/golang/sys
git clone https://github.com/golang/tools.git $GOPATH/src/github.com/golang/tools
ln -s $GOPATH/src/github.com/golang $GOPATH/src/golang.org/x
如果是Windows下,最后一条可以替换为mklink命令,或者直接拷贝文件夹修改一下名称即可。
go的官方包都在这个目录下:
https://github.com/golang
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
标签:
golang,频率限制,rate
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“golang频率限制 rate详解”评论...
更新动态
20240529
20240529
- 鸣潮安可角色培养材料大全 安可突破材料清单汇总
- 《我推的孩子》第2季全新PV公开!今年7月3日开播
- 外媒:下一代Xbox与前代截然不同 或能运行Steam
- 曝索尼正在开发新动作冒险游戏:以突厥神话为主题
- 黄莺莺【黄莺莺精选1-2】2CD[WAV+CUE]
- 群星《寂寞の诱惑HQ》wav分轨
- 群星《测耳聆听》[LPCD]3CD[WAV]
- 鸣潮桃祈角色培养材料大全 桃祈突破材料清单汇总
- 鸣潮卡卡罗角色培养材料大全 卡卡罗突破材料清单汇总
- 鸣潮维里奈角色培养材料大全 维里奈突破材料清单汇总
- 群星《红歌汇》HQ黑胶2CD[WAV分轨]
- 发烧名盘《超级名作3·寂静仙境HQ》2CD[DTS-WAV]
- 【古典天碟】(XRCD24)桑多尔·韦格《莫扎特-小夜曲、嬉游曲》1987[WAV/分轨]
- 请愿发起人庆祝《剑星》取消服装审查:玩家的胜利!
- 身陷桃色丑闻!70岁声优古谷彻承认出轨致其节目关停