Golang循环中goroutine的正确使用:避免变量捕获与并发控制技巧
for i := 0; i < 10; i++ {
go func() {
fmt.Println(i)
}()
}
var wg sync.WaitGroup for i := 0; i < 10; i++ {
wg.Add(1)
go func(x int) {
defer wg.Done()
processTask(x)
}(i)
} wg.Wait()
jobs := make(chan Task, 100) for w := 1; w <= 10; w++ {
go worker(w, jobs)
}
// 提交任务 for _, task := range tasks {
jobs <- task
} close(jobs)
func worker(id int, jobs <-chan Task) {
for task := range jobs {
process(task)
}
}