gpt4 book ai didi

go - 使用 channel 下单

转载 作者:行者123 更新时间:2023-12-02 14:26:46 26 4
gpt4 key购买 nike

我有来自 Gotour 的代码:

func sum(s []int, c chan int) {
sum := 0
for _, v := range s {
sum += v
}
fmt.Printf("Sending %d to chan\n", sum)
c <- sum // send sum to c
}

func main() {
s := []int{2, 8, -9, 4, 0, 99}
c := make(chan int)
go sum(s[len(s)/2:], c)
go sum(s[:len(s)/2], c)

x, y := <-c, <-c // receive from c

fmt.Println(x, y, x+y)
}

产生此输出:

Sending 1 to chan
Sending 103 to chan
1 103 104

在此,x 获得第二个总和,y 获得第一个总和。为什么顺序颠倒了?

最佳答案

类似于goroutines order of execution

如果多次运行,可能会得到不同的结果。当我运行这个时,我得到:

Sending 103 to chan
Sending 1 to chan
103 1 104

如果您希望结果是确定性的。您可以使用两个 channel :

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

c1 := make(chan int)
c2 := make(chan int)
go sum(s[len(s)/2:], c1)
go sum(s[:len(s)/2], c2)

x, y := <-c1, <-c2 // receive from c

fmt.Println(x, y, x+y)
}

关于go - 使用 channel 下单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58470674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com