大家来解惑--这段代码有啥问题?

javasgl · · 2876 次点击
```go package main import ( "fmt" "sync" "time" ) var wg sync.WaitGroup func main() { limiter := make(chan int, 10) wg.Add(20) //这里个数要和下载任务个数一致 for i := 0; i < 20; i++ { limiter <- i go download(limiter) } wg.Wait() fmt.Println("结束的收尾工作") } func download(limiter chan int) { defer wg.Done() i, ok := <-limiter if !ok { fmt.Println("all download") return } time.Sleep(1 * time.Second) fmt.Println("start to download :", i) } ```
#29
更多评论
polaris
社区,需要你我一同完善!
问题的关键在于 main goroutine 提前退出了。 不论是那种代码,最好在 main 函数最后等待所有 goroutine 执行完成,方法很多了,可以 Sleep,可以 sync.WaitGroup 等等。
#1
但是我只仅仅调换了下 sleep 和 print 语句的先后顺序,就能打印到 99 了。
#2