Go Channel 的疑惑

CrazyCodes
  • 16.3k

官方的一道demo

package main

import "fmt"

func sum(s []int, c chan int) {
    sum := 0
    for _, v := range s {
        sum += v
    }

    c <- sum // send sum to c
}

func main() {
    s := []int{7, 2, 8, -9, 4, 0}

    c := make(chan int)

    go sum(s[:len(s)/2], c) // 7,2,8 = 17

    go sum(s[len(s)/2:], c) // -9,4,0 = -5

    x, y := <-c, <-c // receive from c
    //
    fmt.Println(x, y, x+y) // 17,-5,12
}

正常按照先进先出结果应该是 17,-5,12
为何打印出的结果是 -5,17,12 。
不解。求大佬解答下

回复
阅读 834
1 个回答

go sum() 是异步执行的,你起了两个,这个两个任务谁先执行完毕,谁后执行完毕的顺序是不确定的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏