Why is this a deadlock in example 1, and does not deadlock nor print anything in example 2 ?
Example 1.)
func main() {
w := sync.WaitGroup{}
w.Add(4)
c := make(chan int)
go func() { c <- 1; w.Done() }()
go func() { c <- 2; w.Done() }()
go func() { c <- 3; w.Done() }()
go func() { println(len(c)); w.Done() }()
w.Wait()
}
Example 2.)
func main() {
w := sync.WaitGroup{}
w.Add(3)
c := make(chan int)
go func() { c <- 1; w.Done() }()
go func() { c <- 2; w.Done() }()
go func() { c <- 3; w.Done() }()
go func() { w.Wait(); println(len(c)) }()
}