2 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個贊
您無需等待 中的兩個“非工作”goroutine main
,因此一旦wg.Wait()
返回,進(jìn)程就會關(guān)閉,并拆除所有未完成的 goroutine。
由于其中一個正在處理結(jié)果,因此在您看來,好像并非所有任務(wù)都已處理(這是真的)。

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個贊
工作人員完成后關(guān)閉結(jié)果通道。在主 goroutine 中處理結(jié)果。
wg := sync.WaitGroup{}
for i := 1; i < 1000; i++ {
wg.Add(1)
go worker(&wg)
}
go func() {
for i := 1; i < 65535; i++ {
jobs <- Job{host, i}
}
// No more jobs, exit from worker loops.
close(jobs)
// Wait for workers to write all results and exit.
wg.Wait()
// No more results, exit from main loop.
close(results)
}()
for result := range results {
if result.status {
fmt.Println(result.job, "open")
}
}
- 2 回答
- 0 關(guān)注
- 131 瀏覽
添加回答
舉報(bào)