package main
import "time"
import (
    "github.com/golang/glog"
)
func main() {
    //requests := make(chan int, 5)
    //for i := 1; i <= 5; i++ {
    //  requests <- i
    //}
    //close(requests)
    //
    //limiter := time.Tick(200 * time.Millisecond)
    //
    //for req := range requests {
    //  <-limiter
    //  glog.Info("request", req, time.Now())
    //}
    burstyLimiter := make(chan time.Time, 3)
    for i := 0; i < 3; i++ {
        burstyLimiter <- time.Now()
    }
    go func() {
        //for t := range time.Tick(200 * time.Millisecond) {
        for range time.Tick(200 * time.Millisecond) {
            for i := 0; i < 3; i++ {
                burstyLimiter <- time.Now()
            }
            //burstyLimiter <- t
        }
    }()
    burstyRequests := make(chan int, 30)
    for i := 1; i <= 30; i++ {
        burstyRequests <- i
    }
    close(burstyRequests)
    for req := range burstyRequests {
        <-burstyLimiter
        glog.Info("request", req, time.Now())
    }
}结果如下
 request1 2020-07-13 16:40:05.900113 +0800 CST m=+0.002950864
 request2 2020-07-13 16:40:05.9003 +0800 CST m=+0.003137902
 request3 2020-07-13 16:40:05.900321 +0800 CST m=+0.003158913
 request4 2020-07-13 16:40:06.104337 +0800 CST m=+0.207172945
 request5 2020-07-13 16:40:06.104502 +0800 CST m=+0.207338138
 request6 2020-07-13 16:40:06.104537 +0800 CST m=+0.207372952
 request7 2020-07-13 16:40:06.303792 +0800 CST m=+0.406626954
 request8 2020-07-13 16:40:06.303896 +0800 CST m=+0.406731173
 request9 2020-07-13 16:40:06.303995 +0800 CST m=+0.406829851
 request10 2020-07-13 16:40:06.503244 +0800 CST m=+0.606077214
 request11 2020-07-13 16:40:06.503323 +0800 CST m=+0.606156100
 request12 2020-07-13 16:40:06.503345 +0800 CST m=+0.606178516
 request13 2020-07-13 16:40:06.704053 +0800 CST m=+0.806884799
 request14 2020-07-13 16:40:06.704221 +0800 CST m=+0.807053386
 request15 2020-07-13 16:40:06.70433 +0800 CST m=+0.807161676
 request16 2020-07-13 16:40:06.904782 +0800 CST m=+1.007612931
 request17 2020-07-13 16:40:06.90501 +0800 CST m=+1.007840196
 request18 2020-07-13 16:40:06.905038 +0800 CST m=+1.007868590
 request19 2020-07-13 16:40:07.101089 +0800 CST m=+1.203918385
 request20 2020-07-13 16:40:07.101135 +0800 CST m=+1.203964080
 request21 2020-07-13 16:40:07.101141 +0800 CST m=+1.203969567
 request22 2020-07-13 16:40:07.305304 +0800 CST m=+1.408131097
 request23 2020-07-13 16:40:07.305351 +0800 CST m=+1.408178845
 request24 2020-07-13 16:40:07.305363 +0800 CST m=+1.408190715
 request25 2020-07-13 16:40:07.504234 +0800 CST m=+1.607060048
 request26 2020-07-13 16:40:07.50428 +0800 CST m=+1.607105608
 request27 2020-07-13 16:40:07.504292 +0800 CST m=+1.607117657
 request28 2020-07-13 16:40:07.705046 +0800 CST m=+1.807870760
 request29 2020-07-13 16:40:07.705153 +0800 CST m=+1.807978366
 request30 2020-07-13 16:40:07.705185 +0800 CST m=+1.808010207
                
                










