Why does my code deadlock (followed by crash) on read from channel, I would expect it to block on read after the channel is read completely, but not crash. I understand it is a deadlock state as no one is writing to the channel and read blocks on it.
How can I change the code to read all the channel content and then exit from main instead of crash.
Go playground: https://play.golang.org/p/rjXZZOx1FFZ
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
news := make(chan int, 10)
wg.Add(1)
go foo(&wg, news)
wg.Wait()
for {
fmt.Printf("reading: %v
", <-news)
//crashes here after printing 0-9
}
}
func foo(wg *sync.WaitGroup, news chan int) {
for i:=0; i<10;i++ {
fmt.Printf("Writing
")
news <- i
}
(*wg).Done()
}