Я получил ошибку при запуске, следуя golang сниппету. Я думаю, что прогресс будет блокироваться в wg.Wait () до тех пор, пока не закончится процедура go. тогда значение будет получено из c1. Но это может происходить не так, как ожидалось.
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\n")
time.Sleep(1 * time.Second)
c1 <- "one"
fmt.Printf("go routine done\n")
}()
wg.Wait()
fmt.Printf("done c1: %v\n", <-c1)
fmt.Printf("out\n")
}
информация об ошибке:
go routine begin
fatal error: all goroutines are asleep - deadlock!