我正在学习Go语言,遇到了以下代码片段:
package main
import "fmt"
func sum(a []int, c chan int) {
sum := 0
for _, v := range a {
sum += v
}
c <- sum // send sum to c
}
func main() {
a := []int{7, 2, 8, -9, 4, 0}
c := make(chan int, 2)
go sum(a[0:3], c)
go sum(a[3:6], c)
x := <-c
y := <-c
// x, y := <-c, <-c // receive from c
fmt.Println(x, y)
}
Output:
-5 17
Program exited.
有人能告诉我为什么“sum”函数的第二次调用会在第一次之前通过通道吗?在我看来,输出应该是:
17 -5
我也用了一个非缓冲通道进行测试,输出的顺序也是相同的。我错过了什么吗?