我正在学习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';
}
来监控工作人员。但是我不知道如何等待完成工作并能够使用找到的项目。
谢谢!
答案 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
仅用于演示。您的循环实现可能会有所不同。