请问为啥输出是4,进入的到ch里不是先进先出原则吗,我理解应该是输出是0的呀,求大神解释

XITEHIP · · 961 次点击
kwely
认真地老去
#### ```go package main import "fmt" func main() { //创建无缓冲管道 channelInt := make(chan int) for i := 0; i < 5; i++ { j := i //每循环一次,都会创建一个子协程 go func(j int) { //新创建的子协程是无规律的执行顺序 //考虑到CPU的执行速度,以及操作系统的进程轮询计划,所以不确定哪个数先写进管道 channelInt <- j fmt.Printf("现在是子协程执行到i==>%d\n", j) }(j) } fmt.Printf("现在执行主协程\n") fmt.Printf("==>%d\n", <-channelInt) //可以查看执行结果,就知道为什么你结果一会儿是4或一会儿是0了 } ``` ![image.png](https://static.studygolang.com/180727/668630b59c7daa8cb601761e07b8e64c.png)
#5
更多评论
go协程执行的顺序是不定的
#1
我跑的是0啊,你跑过了吗?理论上也是0,无缓冲的channel
#2