我试图通过将我调用的函数放置在稍后访问的队列中来对它们进行速率限制。下面我有一段我创建的请求,requestHandler 函数以一定的速率处理每个请求。
我希望它接受具有不同类型参数的各种函数,因此是 interface{} 类型。
我如何才能通过通道传递函数并成功调用它们?
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(string, string) 和 GetSummonerName(int, int) 是函数):
ch := make(chan interface{})
pushQueue(l.GetLeagueEntries, ch)
pushQueue(l.GetSummonerName, ch)
leagues, _ := <-ch(string1, string2)
summoners, _ := <-ch(int1, int2)
侃侃无极
当年话下
慕神8447489
相关分类