Sto provando a valutare il limite delle funzioni che chiamo ponendole attraverso una coda per l'accesso in seguito. Sotto ho una sezione di richieste che ho creato e la funzione requestHandler elabora ogni richiesta ad una determinata velocità.Vai: passaggio delle funzioni attraverso i canali
Voglio che accetti tutti i tipi di funzioni con diversi tipi di parametri, da qui il tipo di interfaccia {}.
Come potrei passare le funzioni attraverso un canale e chiamarle con successo?
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)
}
}
Ecco un esempio di quello che sto cercando di realizzare (GetLeagueEntries (string, string) e GetSummonerName (int, int) sono funzioni):
ch := make(chan interface{})
pushQueue(l.GetLeagueEntries, ch)
pushQueue(l.GetSummonerName, ch)
leagues, _ := <-ch(string1, string2)
summoners, _ := <-ch(int1, int2)
Perché si vuole limitare tasso delle chiamate di funzione? la limitazione dell'accesso alla risorsa reale limitata (come netwrok, disco, ecc.) potrebbe essere più facile da implementare. Dai anche un'occhiata a https://godoc.org/golang.org/x/time/rate – kostya
Perché queste chiamate di funzione sono chiamate di librerie esterne legate a un'API. Devo limitare le mie funzioni. – tyuo9980