2016-09-15 2 views
0

私はGoを学習しています。私は、未知の量の項目の中にいくつかのもの(未知の量)が見つかるまで、再帰的なステップを持つforループを持っています。 検索をスピードアップできるように、go func()を使用します。 私は労働者を監視するためにchanchan <-<-chanを使用しています。しかし、私は仕事が完了するのを待って、見つけたアイテムを使う方法を知らない。ステップ数が不明なパラレルforloop

ありがとうございました!

+0

コードサンプルはあなたの意図をより明確にします。 –

答えて

0

ここで待機グループが便利です。

変数を宣言し、待機グループを追加します。

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() 
0

他の答えが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) 
) 

は単なるデモンストレーション用です。ループの実装は異なる場合があります。

関連する問題