0111-Go-速率限制

环境

  • Time 2022-08-24
  • Go 1.19

前言

说明

参考:https://gobyexample.com/rate-limiting

目标

使用 Go 语言的通道的速率限制。

固定速率处理

package main

import (
    "fmt"
    "time"
)

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
        fmt.Println("request", req, time.Now())
    }
}

缓冲速率处理

package main

import (
    "fmt"
    "time"
)

func main() {

    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) {
            burstyLimiter <- t
        }
    }()

    burstyRequests := make(chan int, 5)
    for i := 1; i <= 5; i++ {
        burstyRequests <- i
    }
    close(burstyRequests)
    for req := range burstyRequests {
        <-burstyLimiter
        fmt.Println("request", req, time.Now())
    }
}

总结

使用 Go 语言的通道的速率限制。

附录

posted @ 2022-11-27 19:26  jiangbo4444  阅读(40)  评论(0)    收藏  举报