代码如下,
func worker(c chan int) {
fmt.Println("I am a worker....")
num := <-c
fmt.Println(num)
}
func main() {
c := make(chan int)
go worker(c)
c <- 2 //问题在这,如果把这个去掉,则打印 I am main 加上这个,则会 打印出 num
fmt.Println("I am main")
}
有疑问加站长微信联系(非本文作者)

worker中,chan处于阻塞状态,因为你定义的是一个无缓冲的通道。 c<-2 写入通道值,所以通道不再阻塞 打印出数字 大致就是这样
楼上说的对
在后面加上一个
time.Sleep(time.Second * 5)
那么这一行fmt.Println("I am a worker....")
也会执行 数字没打印,就是一楼说的阻塞