私はGoを学習しています。私は、未知の量の項目の中にいくつかのもの(未知の量)が見つかるまで、再帰的なステップを持つforループを持っています。 検索をスピードアップできるように、go func()
を使用します。 私は労働者を監視するためにchan
とchan <-
<-chan
を使用しています。しかし、私は仕事が完了するのを待って、見つけたアイテムを使う方法を知らない。ステップ数が不明なパラレルforloop
ありがとうございました!
私はGoを学習しています。私は、未知の量の項目の中にいくつかのもの(未知の量)が見つかるまで、再帰的なステップを持つforループを持っています。 検索をスピードアップできるように、go func()
を使用します。 私は労働者を監視するためにchan
とchan <-
<-chan
を使用しています。しかし、私は仕事が完了するのを待って、見つけたアイテムを使う方法を知らない。ステップ数が不明なパラレルforloop
ありがとうございました!
ここで待機グループが便利です。
変数を宣言し、待機グループを追加します。
var wg sync.WaitGroup
wg.Add(1)
延期あなたの行くルーチンとそれ外ブロックの内部仕上げ待機グループ:
go func(){
//your function here. If you want a for loop with go routines put it outside the go routine
defer wg.Done()
}()
wg.Wait()
他の答えがsync.WaitGroup
について正しいですここで使うツール。 for
ループIMHOが間違っている、私はあなたが同時にループ内のアイテムを処理しようとしていると思います。このように:for
ループでsourceOfUnknownQuantity
を使用して
func main() {
wg := &sync.WaitGroup{}
for item := range sourceOfUnknownQuantity {
wg.Add(1)
go process(item, wg)
}
wg.Wait()
}
func process(item int, wg *sync.WaitGroup) {
defer wg.Done()
// process item
}
var (
sourceOfUnknownQuantity = make(chan int)
)
は単なるデモンストレーション用です。ループの実装は異なる場合があります。
コードサンプルはあなたの意図をより明確にします。 –