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.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来下载
解决方法: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
以上为个人经验,希望能给大家一个参考,也希望大家多多支持优爱好网。如有错误或未考虑完全的地方,望不吝赐教。
相关文章:
1. JavaScript实现获取图片文件真实格式的示例代码2. requestAnimationFrame使用示例详解3. JavaScript开发中需要搞懂的字符编码总结4. 高频率Vue面试题汇总以及答案5. vue3使用el-upload上传文件示例详解6. JavaScript深拷贝方法structuredClone使用7. uniapp 手机验证码输入框实现代码(随机数、倒计时、隐藏手机号码中间四位)可以直接使用8. 使用Node.js实现Clean Architecture方法示例详解9. 使用uniapp打包微信小程序时主包和vendor.js过大解决(uniCloud的插件分包)10. JS实现微信播音效果示例详解