golang 函数 输出如何实现限流
时间: 2023-12-26 10:03:36 浏览: 162
在 Go 中,可以使用 channel 来实现限流。具体来说,可以使用带缓冲的 channel 来限制某个函数的并发数,从而实现限流。下面是一个简单的示例:
```go
func LimitFuncConcurrency(f func(), maxConcurrency int) {
sem := make(chan struct{}, maxConcurrency)
for i := 0; i < maxConcurrency; i++ {
sem <- struct{}{}
}
for {
<-sem
go func() {
f()
sem <- struct{}{}
}()
}
}
```
这个函数接受两个参数:一个需要进行限流的函数 f 和最大并发数 maxConcurrency。它使用带缓冲的 channel sem 来限制最大并发数。在函数启动时,先向 sem 中放入 maxConcurrency 个 struct{}{} 值,代表最大并发数。之后,不断从 sem 中取出一个 struct{}{} 值,表示有一个空闲的并发槽位可用。然后,启动一个新的 goroutine 来执行函数 f,并在执行完成之后将 struct{}{} 值重新放回 sem 中,表示又有一个空闲槽位可用了。这样就能够限制函数 f 的最大并发数了。
阅读全文