【发布时间】:2019-01-30 11:46:47
【问题描述】:
我正在学习Go,并且已经运行过以下代码sn-p:
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
我还使用无缓冲通道对此进行了测试,它也提供了相同的输出顺序。我错过了什么?
【问题讨论】: