我试图通过将它们放入队列以稍后访问来限制函数的速率限制。在下面,我创建了一小部分请求,并且requestHandler函数以一定的速率处理每个请求。转:通过通道传递函数
我希望它接受具有不同类型参数的各种函数,因此接口{}类型。
我将如何通过通道传递函数并成功调用它们?
type request struct {
function interface{}
channel chan interface{}
}
var requestQueue []request
func pushQueue(f interface{}, ch chan interface{}) {
req := request{
f,
ch,
}
//push
requestQueue = append(requestQueue, req)
}
func requestHandler() {
for {
if len(requestQueue) > 0 {
//pop
req := requestQueue[len(requestQueue)-1]
requestQueue = requestQueue[:len(requestQueue)-1]
req.channel <- req.function
}
<-time.After(1200 * time.Millisecond)
}
}
这里是我想要实现(GetLeagueEntries(字符串,字符串)和GetSummonerName(INT,INT)是函数)的例子:
ch := make(chan interface{})
pushQueue(l.GetLeagueEntries, ch)
pushQueue(l.GetSummonerName, ch)
leagues, _ := <-ch(string1, string2)
summoners, _ := <-ch(int1, int2)
你为什么要限制的函数调用的速度?限速访问实际有限的资源(如网络,磁盘等)可能更容易实现。另请参见https://godoc.org/golang.org/x/time/rate – kostya
因为这些函数调用是与API绑定的外部库调用。我必须限制自己的功能。 – tyuo9980