并行forloop步骤数量未知

时间:2016-09-15 00:08:43

标签: go

我正在学习Go。我有一个带有递归步骤的for循环,直到在未知数量的项目中发现了几件事(未知数量)。 我想使用chan来加快搜索速度。 我使用chan <-<-chan function toggle_visibility(id) { var e = document.getElementById(id); if (e.style.display == 'block') e.style.display = 'none'; else e.style.display = 'block'; }来监控工作人员。但是我不知道如何等待完成工作并能够使用找到的项目。

谢谢!

2 个答案:

答案 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()

答案 1 :(得分:0)

另一个答案是正确的sync.WaitGroup是这里使用的工具。 for循环恕我直言是错误的,我认为你将同时处理循环中的项目;像这样:

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

sourceOfUnknownQuantity循环中使用for仅用于演示。您的循环实现可能会有所不同。