我试图弄清楚为什么我有一个带有等待组的死锁。等待()
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func foo(c chan int, i int) {
defer wg.Done()
c <- i
}
func main() {
ch := make(chan int)
for i := 0; i < 10; i++ {
wg.Add(1)
go foo(ch, i)
}
wg.Wait()
close(ch)
for item := range ch {
fmt.Println(item)
}
}
当我像这样运行它时,它会打印fatal error: all goroutines are asleep - deadlock!
我试图更改为缓冲通道,这解决了问题。但我真的很想知道为什么会有死锁。ch
慕码人8056858
相关分类