代码如下:
package main
import (
"fmt"
)
var a string
var c = make(chan int, 10)
func f() {
c <- 0
a = "hello, world"
}
func main() {
go f()
fmt.Println(a)
<-c
}
在main中把fmt.Println(a)和<-c位置交换得到的结果就不一样,这到底是为什么啊,这叫人怎么理解goroutine
有疑问加站长微信联系(非本文作者)

你的代码看的我也挺蛋疼的
当你运行
go f()
后,可以理解为新开了一条支线来跑f()方法
,主线还在继续跑分析你说的两种情况
这是假设所有执行的时间都一样的前提下 如果有某行代码需要执行时间比较长,那结果也会不同
并行的程序执行顺序不可测
你开的chan是有缓冲的,不阻塞,结果就不可预测了。