This is a creation in Article, where the information may have evolved or changed.
Rate limiting is a import mechanism for controlling resource utilzation and maintaining quality of service. Go elegantly supports rate with goroutines, channels, and tickers.
Package Mainimport ("FMT" " Time") Func main () {requests:= Make (chanint,5) forI: =1; I <=5; i++{Requests<-i} close (requests) limiter:= time. Tick (Time.millisecond * $) forReq: =Range Requests {<-limiter FMT. Println ("Request", req, time. Now ())} Burstylimiter:= Make (chan time. Time,3) forI: =3; I <3; i++{Burstylimiter<-Time . Now ()} go func () { forT: = range time. Tick (Time.millisecond * $) {Burstylimiter<-T}} () Burstyrequests:= Make (chanint,5) forI: =1; I <=5; i++{burstyrequests<-i} close (burstyrequests) forReq: =Range Burstyrequests {<-Burstylimiter FMT. Println ("Request", req, time. Now ())}}
Request1 --Geneva- + -: -:50.374160158+0800cstrequest2 --Geneva- + -: -:50.574201973+0800cstrequest3 --Geneva- + -: -:50.774188326+0800cstrequest4 --Geneva- + -: -:50.973780019+0800cstrequest5 --Geneva- + -: -:51.174145507+0800cstrequest1 --Geneva- + -: -:51.374323823+0800cstrequest2 --Geneva- + -: -:51.574328349+0800cstrequest3 --Geneva- + -: -:51.774329018+0800cstrequest4 --Geneva- + -: -:51.974462542+0800cstrequest5 --Geneva- + -: -:52.174320544+0800Cst
Summarize:
1: .....