golang頻率限制 rate詳解
golang.org/x/time/rate 提對(duì)速度進(jìn)行限制的算法
l := rate.NewLimiter(1, 3) // 一個(gè)參數(shù)為每秒發(fā)生多少次事件,第二個(gè)參數(shù)是最大可運(yùn)行多少個(gè)事件(burst)
Limter提供三中主要的函數(shù) Allow, Reserve, Wait. 大部分時(shí)候使用Wait
Wait/WaitN 當(dāng)沒(méi)有可用事件時(shí),將阻塞等待
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次后,每秒執(zhí)行一次
Allow/AllowN 當(dāng)沒(méi)有可用事件時(shí),返回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 當(dāng)沒(méi)有可用事件時(shí),返回 Reservation,和要等待多久才能獲得足夠的事件
for { r := l.ReserveN(time.Now(), 1) s := r.Delay() time.Sleep(s) fmt.Println(s, time.Now().Format("04:05.000")) }
補(bǔ)充:關(guān)于golang.org/x包問(wèn)題
由于谷歌被墻,跟谷歌相關(guān)的模塊無(wú)法通過(guò)go get來(lái)下載
解決方法:
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命令,或者直接拷貝文件夾修改一下名稱(chēng)即可。
go的官方包都在這個(gè)目錄下:
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Golang?throttled基于GCRA速率限制庫(kù)使用探索
這篇文章主要為大家介紹了Golang?throttled基于GCRA速率限制庫(kù)使用實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Go語(yǔ)言在Linux環(huán)境下輸出彩色字符的方法
這篇文章主要介紹了Go語(yǔ)言在Linux環(huán)境下輸出彩色字符的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04Golang unsafe包中的類(lèi)型和函數(shù)詳解
Golang中的unsafe包用于在運(yùn)行時(shí)進(jìn)行低級(jí)別的操作,這些操作通常是不安全的,因?yàn)榭梢源蚱艷olang的類(lèi)型安全性和內(nèi)存安全性,使用 unsafe包的程序可能會(huì)影響可移植性和兼容性,接下來(lái)看下unsafe包中的類(lèi)型和函數(shù)2023-08-08golang操作連接數(shù)據(jù)庫(kù)實(shí)現(xiàn)mysql事務(wù)示例
這篇文章主要為大家介紹了golang操作連接數(shù)據(jù)庫(kù)實(shí)現(xiàn)mysql事務(wù)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04Go語(yǔ)言中的值類(lèi)型與引用類(lèi)型的使用
Go語(yǔ)言中的數(shù)據(jù)類(lèi)型可以分為值類(lèi)型和引用類(lèi)型,值類(lèi)型包括基本和復(fù)合數(shù)據(jù)類(lèi)型,特點(diǎn)是在傳遞時(shí)進(jìn)行復(fù)制,保證數(shù)據(jù)的安全性,引用類(lèi)型如slice、map等,傳遞的是引用副本,便于大型數(shù)據(jù)操作且提高性能,理解這些概念有助于編寫(xiě)更高效、安全的Go代碼2024-09-09