I got an error when running follow golang snippet.
I think the progress will block at wg.Wait() until the go routine is over. then the value would be obtained from c1. But it may not proceed as expected.
func main() {
c1 := make(chan string)
//var c1 chan string
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
fmt.Printf("go routine begin
")
time.Sleep(1 * time.Second)
c1 <- "one"
fmt.Printf("go routine done
")
}()
wg.Wait()
fmt.Printf("done c1: %v
", <-c1)
fmt.Printf("out
")
}
the error info is,
go routine begin
fatal error: all goroutines are asleep - deadlock!
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…