1
私はgoogle apiに基づいてGmailクライアントを開発しています。ゴルーチンを制限する方法
は、私はより強力にループを処理したいすべてのラベルのために私は詳細
for _, l := range r.Labels {
d, err := s.gClient.Service.Users.Labels.Get(s.gClient.User, l.Id).Do()
}
を取得する必要があり、
r, err := s.gClient.Service.Users.Labels.List(s.gClient.User).Do()
次に、この呼び出しによって得られたラベルのリストを持っていますループ内にゴルーチンを実装しました。
ch := make(chan label.Label)
for _, l := range r.Labels {
go func(gmailLabels *gmailclient.Label, gClient *gmail.Client, ch chan<- label.Label) {
d, err := s.gClient.Service.Users.Labels.Get(s.gClient.User, l.Id).Do()
if err != nil {
panic(err)
}
// Performs some operation with the label `d`
preparedLabel := ....
ch <- preparedLabel
}(l, s.gClient, ch)
}
for i := 0; i < len(r.Labels); i++ {
lab := <-ch
fmt.Printf("Processed %v\n", lab.LabelID)
}
このコードの問題は、gm ail apiにレート制限があるため、このエラーが発生します:
panic: googleapi: Error 429: Too many concurrent requests for user, rateLimitExceeded
この状況を処理する正しい方法は何ですか?
ありがとう、私はどのように先に進むことができるのか分からない...プログラム、ブロック10ラベルを精緻化した後ブロック – matiux
Ops申し訳ありませんが、私は "for gmailLabels:= range chIn {"最初のgoroutine 。 パニック:ランタイムエラー:インデックスが範囲外です[回復] \tパニック:ランタイムエラー:インデックスが範囲外です – matiux
エラーが発生するのはどのラインですか?あなたがここに投稿していないコードでなければならない... – TehSphinX