• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    golang频率限制 rate详解

    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中的time.Duration类型用法说明
    • golang time包做时间转换操作
    • golang xorm及time.Time自定义解决json日期格式的问题
    • golang xorm日志写入文件中的操作
    • 浅谈Golang的方法传递值应该注意的地方
    上一篇:goland Duration 和time的区别说明
    下一篇:golang接口IP限流,IP黑名单,IP白名单的实例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    golang频率限制 rate详解 golang,频率,限制,rate,详解,