golang频率限制 rate详解

 更新时间:2020年12月21日 10:19:52   作者:u010066807  
这篇文章主要介绍了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 throttled基于GCRA速率限制库使用探索

    Golang throttled基于GCRA速率限制库使用探索

    这篇文章主要为大家介绍了Golang throttled基于GCRA速率限制库使用实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Go语言在Linux环境下输出彩色字符的方法

    Go语言在Linux环境下输出彩色字符的方法

    这篇文章主要介绍了Go语言在Linux环境下输出彩色字符的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • Golang unsafe包中的类型和函数详解

    Golang unsafe包中的类型和函数详解

    Golang中的unsafe包用于在运行时进行低级别的操作,这些操作通常是不安全的,因为可以打破Golang的类型安全性和内存安全性,使用 unsafe包的程序可能会影响可移植性和兼容性,接下来看下unsafe包中的类型和函数
    2023-08-08
  • Golang filepath包常用函数详解

    Golang filepath包常用函数详解

    本文介绍与文件路径相关包,该工具包位于path/filepath中,该包试图与目标操作系统定义的文件路径兼容。本文介绍一些常用函数,如获取文件绝对路径,获取文件名或目录名、遍历文件、分割文件路径、文件名模式匹配等函数,并给具体示例进行说明
    2023-02-02
  • golang操作连接数据库实现mysql事务示例

    golang操作连接数据库实现mysql事务示例

    这篇文章主要为大家介绍了golang操作连接数据库实现mysql事务示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • Go语言中的值类型与引用类型的使用

    Go语言中的值类型与引用类型的使用

    Go语言中的数据类型可以分为值类型和引用类型,值类型包括基本和复合数据类型,特点是在传递时进行复制,保证数据的安全性,引用类型如slice、map等,传递的是引用副本,便于大型数据操作且提高性能,理解这些概念有助于编写更高效、安全的Go代码
    2024-09-09
  • Go语言MD5加密用法实例

    Go语言MD5加密用法实例

    这篇文章主要介绍了Go语言MD5加密用法,实例分析了Go语言MD5加密的使用技巧,需要的朋友可以参考下
    2015-03-03
  • Gin使用swagger生成接口文档的代码示例

    Gin使用swagger生成接口文档的代码示例

    Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful Web 服务,它使用 YAML 或 JSON 格式来定义 API 的结构,本文给大家介绍了Gin使用swagger生成接口文档的代码示例,需要的朋友可以参考下
    2024-06-06
  • 详解如何在Go中使用Zap管理日志

    详解如何在Go中使用Zap管理日志

    Zap提供了两种类型的日志记录器—Sugared Logger和Logger,可以更好的管理日志,这篇文章主要为大家介绍了使用Zap管理日志的具体方法,需要的可以了解一下
    2023-07-07
  • go语言中linkname的用法

    go语言中linkname的用法

    这篇文章主要介绍了go语言中linkname的用法,本文给点俺家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08

最新评论