我需要同时处理多个任务,然后“收集”结果。下面是我想出的代码,但我想知道这是否是正确的方法(即惯用/最佳实践),或者是否有我可能会错过的错误。
package main
import "fmt"
import "sync"
func main() {
// ch is the int provider. Cap is 99 but it should
// really be 3
ch := make(chan int, 99)
var wg sync.WaitGroup
for i := 0; i < 3; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
ch <- i
}(i)
}
wg.Wait()
for v := range ch {
fmt.Println("consume ", v)
if len(ch) == 0 {
close(ch)
}
}
fmt.Printf("All done")
}
繁华开满天机
开满天机
相关分类