Logo
开发文档
QQ频道

c := make(chan int) go func() { for i := 0; i < 10; i++ { c <- i fmt.Println(2) } }() for n := 0; n < 2; n++ { fmt.Println("main", <-c) }为什么先打印2

2025-01-31 21:51:59
|
浏览 197

文章如下:

在这段代码中,我们首先创建了一个带有缓冲区的整型通道 c,然后开启了一个匿名函数的goroutine。在goroutine中,我们使用一个for循环将0到9的整数依次发送到通道c中,并且在每次发送完后打印出数字2。

接着在主goroutine中,我们使用另一个for循环接收通道c中的数据,并且在每次接收到数据时打印出"main"和接收到的数字。

从代码的执行逻辑来看,goroutine中的for循环会迅速地发送完0到9的整数到通道c中,并且在每次发送后都会立刻打印数字2。而主goroutine中的for循环在每次循环中通过<-c从通道c中接收数据,由于通道是先进先出的数据结构,所以在这种情况下,通道会先被goroutine中的for循环填满整数,然后主goroutine才会开始接收数据。

因此,在主goroutine中的第一个循环中,会先接收到0这个值并打印出"main 0",然后继续接收其他的值。而在goroutine中,每次发送完整数后都会打印出数字2,因此在这段代码的执行中,先打印2的原因是在goroutine发送完0后马上打印了数字2,而主goroutine接收到0后才进行打印操作。

我要提问
复制内容
分享给好友
AI编程问答网 免责声明:
以上内容除特别注明外均来源于网友提问,AI编程问答网回答,权益归原著者所有;