package main
import( "fmt" )
func main() {
channelInt := make(chan int)
for i:= 0; i < 5; i++ {
j := i
go func(j int) {
channelInt <- j
}(j)
}
fmt.Printf("==>%d\n", <-channelInt)
}
有疑问加站长微信联系(非本文作者)

package main
import( "fmt" )
func main() {
channelInt := make(chan int)
for i:= 0; i < 5; i++ {
j := i
go func(j int) {
channelInt <- j
}(j)
}
fmt.Printf("==>%d\n", <-channelInt)
}
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
`单行代码`
go协程执行的顺序是不定的
我跑的是0啊,你跑过了吗?理论上也是0,无缓冲的channel
结果偶尔4偶尔0,因为你的for循环体没有什么内容,就是在不断创建协程,for循环结束后,这5个协程几乎无间隙连续被创建,在一个极短的时间间隙内创建多个协程,程序并不能精确的判断他们创建的先后顺序。
3楼的代码在for循环内sleep了一下,恰到好处。
####
great
@hznuyyh @Dracula @golwei @Leigg @kwely 谢谢大家
go语法只是创建了一个执行任务,什么时候执行由调度器决定