当我添加表达式“ fmt.Println()”时会发生什么

时间:2019-08-29 09:56:56

标签: go channel

我是个关于golang的小提琴,在探索频道期间,我被以下代码弄糊涂了,所以有人能告诉我两者之间的区别吗?

当我运行代码时,控制台记录-5,17 如果我使用注释,则会得到不同的结果17,-5 我不知道发生了什么事...

golang版本是最新版本

//comman func
func sum(a []int, c chan int) {
    total := 0
    for _, v := range a {
        total += v
    }
    c <- total  // send total to c
}
func main (){
    a := []int{7, 2, 8, -9, 4, 0}

    c := make(chan int)
    go sum(a[:len(a)/2], c)
        //fmt.Println(a[:len(a)/2])
    go sum(a[len(a)/2:], c)
        //fmt.Println(a[len(a)/2:])
    gh,w33 :=  <-c, <-c
    fmt.Println(gh,w33)
}

我希望结果的两倍是17-5,但是当注释无效时,结果是-5 17

1 个答案:

答案 0 :(得分:0)

golang使用调度程序来调度go例程。 您可以在这里https://povilasv.me/go-scheduler/了解更多信息 因此,当您运行上述程序时。不确定goroutine将按照您编写的顺序执行。