私は呼び出した関数を、後でアクセスするためにキューに入れてレートを制限しようとしています。以下は、私が作成したリクエストのスライスを示しています。また、requestHandler関数は、各リクエストを一定の割合で処理します。Go:チャンネルを介して関数を渡す
異なる種類のパラメータを持つすべての種類の関数を受け入れるようにしたいので、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(文字列、文字列)と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